什么是单元测试
写了个类,要给别人用,会不会有bug?怎么办?测试一下。
用main方法测试好不好?不好!
-
不能一起运行!
-
大多数情况下需要人为的观察输出确定是否正确
为什么要进行单元测试
重用测试,应付将来的实现的变化。
提高士气,明确知道我的东西是没问题的。
JUnit4 HelloWorld
-
new project
-
建立类
-
建立testcase
放弃旧的断言,使用hamcrest断言
-
assertThat
-
使用hamcrest的匹配方法
-
更自然
-
-
示例
-
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" ) ); -
assertThat(str, containsString( "bjsxt" ) );
assertThat( str,endsWith("bjsxt" ) );
assertThat( str, startsWith("bjsxt" ) );
assertThat( n, equalTo( nExpected ) );
assertThat( str, equalToIgnoringCase( "bjsxt" ) );
assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" )); -
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) ); -
assertThat(map, hasEntry( "bjsxt", "bjsxt" ));
assertThat( iterable, hasItem ( "bjsxt" ));
assertThat( map, hasKey ( "bjsxt" ) );
assertThat(map, hasValue ( "bjsxt" ) );
-
Failure和Error
-
Failure是指测试失败
-
Error是指测试程序本身出错
JUnit4 Annotation
-
@Test: 测试方法
-
(expected=XXException.class)
-
(timeout=xxx)
-
-
@Ignore:被忽略的测试方法
-
@Before:每一个测试方法之前运行
-
@After:每一个测试方法之后运行
-
@BeforeClass:所有测试开始之前运行
-
@AfterClass:所有测试结束之后运行
运行多个测试
注意
-
遵守约定,比如:
-
类放在test包中
-
类名用XXXTest结尾
-
方法用testMethod命名
-
其他框架
TestNG