keeps the bar green to keep the code clean" - JUNIT單元測試
首先新建一個類:
package com.zzk.junit4; public class T { public int add (int x,int y) { return x + y; } //老版本的測試 public static void main(String[] args) { int z = new T().add(3, 5); System.out.println(z); } }
然後寫一個JUNIT單元測試,對add(int x ,int y)進行測試
可以單獨對方法是用JUNIT測試:
package com.zzk.junit4.test; import static org.junit.Assert.*;//這是一個類不是包 import org.junit.After; import org.junit.Test; import com.zzk.junit4.T; public class TTest { @After public void tearDown() throws Exception { } @Test public void testAdd() { //fail("Not yet implemented"); int z = new T().add(5, 3); assertEquals(8, z);//期望值8,實際值z } }
文檔一份如下:
什麼是單元測試
寫了個類,要給別人用,會不會有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
最後更新:2017-04-02 17:28:38