什麼是單元測試 寫了個類,要給別人用,會不會有bug?怎麼辦?測試一下。 用main方法測試好不好?不好! 為什麼要進行單元測試 重用測試,應付將來的實現的變化。 提高士氣,明確知道我的東西是沒問題的。 JUnit4 HelloWorld 需要導入JUnit和hamcrest包 放棄舊的斷言,使用h ...
什麼是單元測試
寫了個類,要給別人用,會不會有bug?怎麼辦?測試一下。
用main方法測試好不好?不好!
- 不能一起運行!
- 大多數情況下需要人為的觀察輸出確定是否正確
為什麼要進行單元測試
重用測試,應付將來的實現的變化。
提高士氣,明確知道我的東西是沒問題的。
JUnit4 HelloWorld
需要導入JUnit和hamcrest包
- new project
- 建立類
- 建立testcase
- assertThat
- 使用hamcrest的匹配方法
放棄舊的斷言,使用hamcrest斷言
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
- Failure是指測試失敗
- Error是指測試程式本身出錯
JUnit4 Annotation
- @Test: 測試方法
a) (expected=XXException.class)
b) (timeout=xxx)
2.@Ignore: 被忽略的測試方法
3.@Before: 每一個測試方法之前運行
4.@After: 每一個測試方法之後運行
5.@BeforeClass: 所有測試開始之前運行
6.@AfterClass: 所有測試結束之後運行
運行多個測試
註意
- 遵守約定,比如:
a) 類放在test包中
b) 類名用XXXTest結尾
c) 方法用testMethod命名
其他框架
TestNG
筆記來源:尚學堂