項目工程基于Idea IDE創(chuàng)建,其對JUnit對支持非常不錯,寫單元測試類也非常方便,直接使用快捷鍵Ctrl+Shift+T即可自動生成相應的單元測試類模板,使用快捷鍵Alt+Insert可直接添加新增的單元測試方法;另外本項目使用Gradle進行依賴管理。
為什么做單元測試:
1.幫助理解需求
單元測試應該反映Use Case,把被測單元當成黑盒測試其外部行為。
2.提高實現(xiàn)質量
單元測試不保證程序做正確的事,但能幫助保證程序正確地做事,從而提高實現(xiàn)質量。
3.測試成本低
相比集成測試、驗收測試,單元測試所依賴的外部環(huán)境少,自動化程度高,時間短,節(jié)約了測試成本。
4.反饋速度快
單元測試提供快速反饋,把bug消滅在開發(fā)階段,減少問題流到集成測試、驗收測試和用戶,降低了軟件質量控制的成本。
5.利于重構
由于有單元測試作為回歸測試用例,有助于預防在重構過程中引入bug。
6.文檔作用
單元測試提供了被測單元的使用場景,起到了使用文檔的作用。
7.對設計的反饋
一個模塊很難進行單元測試通常是不良設計的信號,單元測試可以反過來指導設計出高內聚、低耦合的模塊。
JUnit簡介
JUnit 是一個 Java 編程語言的單元測試框架。JUnit 在測試驅動的開發(fā)方面有很重要的發(fā)展,是起源于 JUnit 的一個統(tǒng)稱為 xUnit 的單元測試框架之一。
單元測試規(guī)范
1.單元測試類后面加Test;
2.測試方法使用@Test標注;
3.測試方法名之前加test;
4.所有測試方法返回類型必須為void且無參數(shù);
5.每個測試方法之間相互獨立;
JUnit4常用注解
@Test:把一個方法標記為測試方法
它有兩個常用屬性:
1.excepted屬性是用來測試異常;
2.timeout用來測試性能的,是測試一個方法能不能在規(guī)定時間內完成;
也可使用@Rule規(guī)則來規(guī)定測試類中的所有方法的超時時間,如果類中的任意一個方法執(zhí)行時間超過了在Timeout規(guī)則中規(guī)定的值,測試方法將拋出異常,測試結果為失。ǔ瑫r參數(shù)是以毫秒記)。如:
@Rule
public Timeout timeout = new Timeout(1000);
@Before:每一個測試方法執(zhí)行前自動調用一次;
@After:每一個測試方法執(zhí)行完自動調用一次;
@BeforeClass:所有測試方法執(zhí)行前執(zhí)行一次,在測試類還沒有實例化已經(jīng)被加載,所以用static修飾;
@AfterClass:所有測試方法執(zhí)行完執(zhí)行一次,在測試類還沒有實例化已經(jīng)被加載,所以用static修飾;
@Ignore:禁止執(zhí)行junit測試類的某些或者全部測試方法,應用在方法或類上;
public class AnnotationTest {
int i;
public AnnotationTest(){
System.out.println("構造方法");
}
@BeforeClass
public static void setUpBeforClass(){
System.out.println("BeforClass");
}
@AfterClass
public static void tearDownAfterClass(){
System.out.println("AfterClass");
}
@Before
public void setUp(){
System.out.println("Before");
}
@After
public void tearDown(){
System.out.println("After");
}
@Test
public void test1(){
System.out.println("Test1");
System.out.println("i="+i++);
}
@Test
public void test2(){
System.out.println("Test2");
System.out.println("i="+i++);
}
@Ignore
public void test3(){
System.out.println("Test3");
}
}
輸出結果:
BeforClass
構造方法
Before
Test2
i=0
After
AfterClass