Junit4简单教程

什么是单元测试

写了个类,要给别人用,会不会有bug?怎么办?测试一下。

用main方法测试好不好?不好!

1.        不能一起运行!

2.        大多数情况下需要人为的观察输出确定是否正确

为什么要进行单元测试

重用测试,应付将来的实现的变化。

提高士气,明确知道我的东西是没问题的。

JUnit4 HelloWorld

1.        new project

2.        建立类

3.        建立testcase

放弃旧的断言,使用hamcrest断言

1.        assertThat

2.        使用hamcrest的匹配方法

a)        更自然

3.        示例

a)        assertThat( n, allOf(greaterThan(1), lessThan(15) ) );
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );
assertThat( n, anything() );
assertThat( str, is( "bjsxt" ) );
assertThat( str, not( "bjxxt" ) );

b)       assertThat( str,containsString( "bjsxt" ) );
assertThat( str, endsWith("bjsxt" ) );
assertThat( str, startsWith( "bjsxt" ) );
assertThat( n, equalTo( nExpected ) );
assertThat( str, equalToIgnoringCase( "bjsxt" ) );
assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" ) );

c)        assertThat( d, closeTo( 3.0,0.3 ) );
assertThat( d, greaterThan(3.0) );
assertThat( d, lessThan (10.0) );
assertThat( d, greaterThanOrEqualTo (5.0) );
assertThat( d, lessThanOrEqualTo (16.0) );

d)       assertThat( map, hasEntry("bjsxt", "bjsxt" ) );
assertThat( iterable, hasItem ( "bjsxt" ) );
assertThat( map, hasKey ( "bjsxt" ) );
assertThat( map, hasValue ( "bjsxt" ) );

Failure和Error

1.        Failure是指测试失败

2.        Error是指测试程序本身出错

JUnit4 Annotation

1.        @Test: 测试方法 (该注释只能修饰public void方法)

a)        (expected=XXException.class)

b)       (timeout=xxx)

2.        @Ignore: 被忽略的测试方法 (该注释只能修饰public void方法)

3.        @Before: 每一个测试方法之前运行  (该注释只能修饰public void方法)

4.        @After:  每一个测试方法之后运行  (该注释只能修饰publicvoid方法)

5.        @BeforeClass: 所有测试开始之前运行 (该注释只能修饰publicstaticvoid 方法)

6.        @AfterClass:  所有测试结束之后运行(该注释只能修饰publicstatic void方法)

运行多个测试


注意

1.        遵守约定,比如:

a)        类放在test包中

b)       类名用XXXTest结尾

c)        方法用testMethod命名


其他框架

TestNG


***************************************************************************************************************************************************

*****************************************************************************************************************************************************

1、静态引入

    jdk1.5后支持类的静态引入。引入以后直接使用类的静态方法,无须加类名.

    语法:

            import  static  org.junit.Assert.*;

2、assertThat:hamcrest断言

        assertThat 可以替代其他所有的assert方法,在后续的测试中,建议使用assertThat方法。

        assertThat匹配符:一般匹配符,字符匹配符,数值匹配符,collection匹配符

 一般匹配符:

       allOf: 所有的条件都满足才通过,相当于“与”(&&)

       anyOf: 所有的条件只要有一个满足即通过,相当于“或”(||)

       anything: 无论什么条件,都通过

        is: 前面待测的object等于后面给出的object,则测试通过。

        not:与is相反,前面待测的object不等于后面给出的object,测试才通过。

 字符串相关的匹配符:

       containsString:前面待测的字符串包含后面给出的字符串,则测试通过。

       endsWith:前面待测的字符串以后面给出的字符串结尾,则测试通过。

       startsWith:前面待测的字符串以后面给出的字符串开头,则测试通过。

       equalTo:  前面待测的对象等于后面给出的对象则测试通过。可用于测试数值之间,字符串之间和对象之间是否相等,相当于Ojbect的equals方法

        equalToIgnoringCase:忽略大小写

       equalToIgnoringWhiteSapce:忽略头尾的空格(注意:字符串内部的空格无法忽略。)

 数值之间匹配符:

      closeTo:在。。。范围内

      greaterThan:大于

      lessThan:小于

      greaterThanOrEqualTo:大于等于

      lessThanOrEqualTo:  小于等于

Collection匹配符:

      hasEntry:map对象包含给出的key和value

      hasKey:map对象包含给出的key

      hasValue:map对象包含给出的value

     hasItem: 迭代对象包含给出的元素

3、failures和errors

    failures表示是测试失败,即受测的方法没有按照设计实现

    errors表示测试代码存在错误,或者系统运行环境出现问题

4、Annotation

    @Test(timeout,excepted)

    被@Test修饰的方法,在junit中会被自动执行,只能修饰public void 方法。两个参数:timeout表示该方法执行的时间必须在该时间内执行完毕才通过。excepted参数指定抛出的异常,该方法必须抛出指定的异常,才能测试通过。

    @Ignore

    暂时忽略需要测试的方法。

    @Before

    被该注释修饰的方法,在每个测试方法执行之前执行一次。该注释只能修饰public void 方法

    @After

    被该注释修饰的方法,在每个测试方法执行之后执行一次。该注释只能修饰public void 方法

    @BeforeClass

    被该注释修饰的方法,在所有测试方法执行之前执行一次。该注释只能修饰publicstatic void 方法

    @AfterClass

    被该注释修饰的方法,在所有测试方法执行之后执行一次。该注释只能修饰publicstatic void 方法

    BeforeClass和AfterClass一般用于申请和释放比较费时的资源的情况下。

*********************************************************************************************************************************************************

*********************************************************************************************************************************************************

1.JDK5允许添加静态类的静态方法
      eg:import static org.junit.Assert.*;
 assertEquals(<期望值>,<实际值>);
     eg: int z = new T().add(5,3);
    assertEquals(8,z);
名言:Keeps the bar green to keep the code clean !


2.assert重载方法的String message应用:
在junit4之后,Assert类中有许多方法都添加了message提示
eg: assertTrue("a is too small",a>8);

 

3.assertThat替代了所有的assert方法,由hamcrest包提供匹配支持
下载:hamcrest-1.2.zip完整版本
添加:(Add External Archives)   hamcrest-core-1.2.jar; hamcrest-library-1.2.jar
  eg: import static org.hamcrest.Matchers.*;
   问题:java.lang.SecurityException:class"org.hamcrast.Matches"'s...
   解决:必须使用同一个classloader, 所以不要用Eclipse自带的junit包,要自己重新引入junit包,问题解决!

 

 (1)assertThat( n, allOf( greaterThan(1), lessThan(15)) );

assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );
assertThat( n, anything() );
assertThat( str, is( "bjsxt" ) );
assertThat( str, not( "bjsxt" ) );

(2)assertThat(str, containsString( "bjsxt" ) );
assertThat( str, endsWith("bjsxt" ) );
assertThat( str, startsWith( "bjsxt" ) );
assertThat( n, equalTo( nExpected ) );
assertThat( str, equalToIgnoringCase( "bjsxt" ) );
assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" ) );

(3)assertThat(d, closeTo( 3.0, 0.3 ) );
assertThat( d, greaterThan(3.0) );
assertThat( d, lessThan (10.0) );
assertThat( d, greaterThanOrEqualTo (5.0) );
assertThat( d, lessThanOrEqualTo (16.0) );

(4)assertThat(map, hasEntry( "bjsxt", "bjsxt" ) );
assertThat( iterable, hasItem ( "bjsxt" ) );
assertThat( map, hasKey ( "bjsxt" ) );
assertThat( map, hasValue ( "bjsxt" ) );

4.Failure和Error的区别:Failure是指测试失败,Error是指测试程序本身出错.所以一定要保证0个Error,才能继续进行测试.
JUnit4 Annotation简介
(1)@Test: 测试方法
    a) (expected=XXException.class)
    b) (timeout=xxx)
(2)@Ignore: 被忽略的测试方法
(3)@Before: 每一个测试方法之前运行
(4)@After: 每一个测试方法之后运行
(5)@BeforeClass: 所有测试开始之前运行
(6)@AfterClass:  所有测试结束之后运行


5.问题:Method Should be static !
@BeforeClass, @AfterClass 必须是static静态的才能用,否则就会报错
原因是Test测试类还没有初始化,如果想用就要用static,主要用于搭建测试环境

 

6.问题:怎样运行测试包里面的所有测试?
解决:在测试包的属性中选择Run all tests...
新的开发模式TDD(Test  Driven Development),先写测试就可以确定需求.

 

7.注意命名规范,要遵守约定,比如:
a)类放在test包中
b)类名用XXXTest结尾
c)方法用testMethod命名

 *****************************************************************************************************************************************************

*****************************************************************************************************************************************************



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值