什麼是單元測試
寫了個類,要給別人用,會不會有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: 測試方法
a) (expected=XXException.class)
b) (timeout=xxx)
2. @Ignore: 被忽略的測試方法
3. @Before: 每一個測試方法之前運行
4. @After: 每一個測試方法之後運行
5. @BeforeClass: 所有測試開始之前運行
6. @AfterClass: 所有測試結束之後運行
運行多個測試
注意
1. 遵守約定,比如:
a) 類放在test包中
b) 類名用XXXTest結尾
c) 方法用testMethod命名
其他框架
TestNG