摘要:它由和建立,逐漸成為源于的的家族中最為成功的一個。與添加進入的的依賴中。具有兩個參數可選該測試方法允許執行的最大時間長度。單位捕獲拋出的異常。這個類不包含任何方法更改入口類的測試運行器為將要運行的測試類作為數組傳入到中。
簡介
JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個。
junit3與junit4區別測試用例不是用來證明你(的邏輯)是對的,而是用來證明你(的斷言)沒有錯。
在JUnit3中需要繼承TestCase類,JUnit4不需要繼承任何類;
在JUnit3中需要覆蓋TestCase中的setUp和tearDown方法,其中setUp方法會在測試執行前被調用以完成初始化工作,而tearDown方法則在結束測試結果時被調用,用于釋放測試使用中的資源,而在JUnit4中,只需要在方法前加上@Before,@After ;
在JUnit3中對某個方法進行測試時,測試方法的命令是固定的,例如對addBook這個方法進行測試,需要編寫名字為tetAddBook的測試方法,而在JUnit4中沒有方法命令的約束,在方法的前面加上@Test,這就代表這個方法是測試用例中的測試方法;
新的斷言assertThat;
@BeforeClass 和 @AfterClass 。在JUnit3,如果所有的test case僅調用一次setUp()和tearDown()需要使用TestSetup類;
測試異常處理@Test(expected = DataFormatException.class);
設置超時@Test(timeout = 1000);
忽略測試@Ignore;
集成測試(suiteTest)。
最大的不同是junit4基本用注解實現,更加靈活。
junit4與maven添加進入maven的pom.xml的依賴中。設置scope為test;
常用注解junit junit 4.12 test
@BeforeClass: public static void方法,當前測試類,所有的測試方法運行前被執行;
@Before: public void方法,當前測試類,他會在所有方法運行結束后被執行;
@Test: public void方法,將一個普通的方法修飾成為一個測試方法。具有兩個參數(可選):
timeout: 該測試方法允許執行的最大時間長度。單位ms
expected: 捕獲拋出的異常。xx.class
@After: public void方法,與@Before組成一對,會在每個測試方法被運行后執行一次;
@AfterClass: public static void方法,與@BeforeClass組成一對,在當前測試類做完所有測試后執行的一個方法;
@Ignore: 所修飾的測試方法會被測試運行器忽略;
@RunWith: 更改測試運行器,自定義運行器需要繼承于org.junit.runner.Runner。
junit4的hello worldimport org.junit.*; public class HelloTest { @Test public void testAdd(){ Assert.assertEquals("test add", 3, 1 + 2); System.out.print("Test add Ok"); } }
測試方法上必須使用@Test進行修飾;
測試方法必須使用public void 進行修飾,不能待任何的參數;
測試單元中的每個方法必須可以獨立測試,測試方法間不能有任何的依賴;
測試類使用Test作為類名的后綴(可選);
測試方法使用test作為方法名的前綴(可選);
junit4運行流程public class FlowTest { @BeforeClass public static void init(){ System.out.println("test class before"); } @AfterClass public static void destory(){ System.out.println("test class after"); } @Before public void beforeTest(){ System.out.println("before test"); } @After public void afterTest(){ System.out.println("after test"); } @Test public void testAdd(){ Assert.assertEquals("test add", 3, 1 + 2); System.out.println("test add ok"); } @Test public void testSub(){ Assert.assertEquals("test subtraction", 3, 4 - 1); System.out.println("test sub ok"); } }
運行結果
test class before before test test add ok after test before test test sub ok after test test class after
@BeforeClass修飾的方法會在所有測試方法調用前執行。該方法為靜態方法,比較適合加載配置文件。
@AfterClass修飾的方法會在所有測試方法調用后執行。該方法為靜態方法,通常用來對資源的清理。比如關閉數據庫連接。
@Before與@After在每個測試方法前后各執行一次。
@Test中的參數public class TimeOutTest { @Test(timeout = 2000) public void testTimeOut(){ while (true){ System.out.println("I"m running!"); try { Thread.sleep(1000 *1); } catch (InterruptedException ignore) { } } } @Test(expected = ArithmeticException.class) public void testException(){ Assert.assertEquals(3,6/0); } }
運行結果
I"m running! I"m running! I"m running! org.junit.runners.model.TestTimedOutException: test timed out after 2000 milliseconds at java.lang.Thread.sleep(Native Method) at TimeOutTest.testTimeOut(TimeOutTest.java:15) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ...
testTimeOut雖然是死循環,但加了@Test(timeout)參數后還是在2秒運行結束。
testException方法沒有拋出ArithmeticException,@Test中的expected起作用了。
批量運行測試類-測試套件(Suite)我們想運行所有的測試類的測試方法,難道我們只能一個一個運行每一個測試類么,這多累啊。幸好,junit4給我們提供了一種方式一次運行所有的測試類-測試套件。使用例子如下:
import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({FlowTest.class,TimeOutTest.class}) public class SuiteTest { }
測試suite就是組織測試類一起運行;
寫一個作為測試suite的入口類。這個類不包含任何方法;
更改suite入口類的測試運行器為Suite.class;
將要運行的測試類作為數組傳入到@Suite.SuiteClasses({})中。
批量運行多組測試用例-測試參數化設置很多時候,我們需要對一個測試,輸入多組測試用例來驗證代碼的正確性。在junit4中,我們不需要編寫n個測試方法。示例如下:
import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.util.Arrays; import java.util.Collection; @RunWith(Parameterized.class) public class ParamsTest { private int expected; private int input1; private int input2; public ParamsTest(int expected, int input1, int input2){ this.expected = expected; this.input1 = input1; this.input2 = input2; } @Parameterized.Parameters public static Collection
運行結果
java.lang.AssertionError: add function Expected :4 Actual :5at org.junit.Assert.fail(Assert.java:88) at org.junit.Assert.failNotEquals(Assert.java:834) at org.junit.Assert.assertEquals(Assert.java:645) at ParamsTest.testAdd(ParamsTest.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ...
第一組測試通過,第2組沒有
更改默認的測試運行器為@RunWith(Parameterized.class);
聲明變量來存放預期值(隨便起名字,class中自己使用,expected/input1/input2);
為測試類聲明一個帶有參數的公共構造器,并在其中為之聲明變量賦值;
聲明一個返回值為Collection的公共靜態方法 并用@Parameterized.Parameters進行修飾。
他山之石junit官網getstart: https://github.com/junit-team/junit4/wiki/Getting-started
junit4入門視頻: http://www.imooc.com/learn/356
junit4手冊:http://wiki.jikexueyuan.com/project/junit/suite-test.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66260.html
摘要:在類里,本地類里用關鍵字聲明過的方法,在單元測試啟動后會自動被調用到。在及的設定思路里,放在路徑下面以結尾的類會被當成單元測試類處理。 ABAP 在ABAP類里,本地類(Local Class)里用關鍵字FOR TESTING聲明過的方法,showImg(https://segmentfault.com/img/remote/1460000016898407); 在單元測試啟動后會自動...
摘要:會把真實值乘以這個因子后存儲,取出時再還原。日期類型可以對日期格式化為字符串存儲,但是建議我們存儲為毫秒值,存儲為,節省空間。 最近在學習es,起碼要先有個es環境吧,然后再是整合到代碼中使用一下,畢竟只有實踐才會有深刻的記憶,這就是所謂的經驗啊,下面開始吧,本文分兩部分,第一部分配置es環境,第二部分整合到springboot中進行簡單的操作,本人也是初次學習,如有錯誤歡迎指出修正,...
摘要:本周在寫單元測試的時候遇見了一個新的,在此記錄一下。通過查看的源碼果然是這樣沒有重寫的但為什么會調用方法呢 本周在寫單元測試的時候遇見了一個新的exception,在此記錄一下。 單元測試中有一段代碼是這樣的: logger.debug(設置班級的學生); klass.setStudentList(Collections.singletonList(student1)); ...
摘要:當面講給你聽講堂地址,或許是最實用的教程,新課促銷中,只要你敢來,保你收貨滿滿。優惠報名全程擼碼快速入門教程全原價,優惠價全程擼碼進階全原價,優惠價 回顧 Spring Boot - 初識 Hello World Spring Boot - Servlet、過濾器、監聽器、攔截器 Spring Boot - 靜態資源處理、啟動加載、日志處理 Spring Boot - 部署Deplo...
摘要:一旦你完成了相應函數,只需要把注解刪去,就可以進行正常的測試。表示該方法只執行一次,并且在所有方法之后執行。 測試類型 單元測試(Unit test) 單元測試關注單一的類. 它們存在的目的是檢查這個類中的代碼是否按照期望正確運行. 集成測試(Integration test) 顧名思義, 集成測試是檢查開發的模塊和其他模塊整合時是否正常工作.雖然集成測試的代碼影響范圍比單元測試要廣,...
閱讀 2915·2021-11-19 09:40
閱讀 3598·2021-10-09 09:43
閱讀 2680·2021-09-22 15:31
閱讀 1732·2021-07-30 15:31
閱讀 786·2019-08-30 15:55
閱讀 3265·2019-08-30 15:54
閱讀 1166·2019-08-30 11:26
閱讀 1915·2019-08-29 13:00