什麼是單元測試
我們寫了一套接口,一個類拿給别人用,怎樣保證沒有bug呢?測試一下。我們可以寫一個main方法測試一下啊!使用main方法測試好嗎?碼農們肯定異口同聲的說:“真的是不好”。
使用main測試:
1.繁瑣不說,也不能好多方法一起測試
2.好的人工的看結果,檢查程式是否正确
Junit HelloWorld
1 new project
2 new class
3 建立classcase
放棄舊的斷言,使用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命名