Junit4使用學習 初步教程
1、快速入門
簡介
JUnit is a simple framework to write repeatable tests. It is an instance of the xUnit architecture for unit testing frameworks.
xUnit是一套基於測試驅動開發的測試框架,包括PythonUnit、CppUnit、JUnit。JUnit使用斷言機制,與預期結果進行比對。
原則
測試方法上必須使用@Test進行修飾
測試方法必須使用public void 進行修飾,不能待任何的參數
新建一個源代碼目錄
測試類的爆應該和被測試類保持一致
測試單元中的每個方法必須可以獨立測試,測試方法間不能有任何的依賴
測試類使用Test作為類名的後綴
測試方法使用test作為方法名的前綴
Calculate.java
public class Calculate { public int add(int a,int b) { return a + b; } public int subtract(int a, int b) { return a - b; } public int multiply(int a,int b) { return a * b; } public int divide(int a ,int b) { return a / b; }}
註:
Failure,一般由單元測試使用的方法判斷失敗所引起的,這表示測試點發現了問題,就是說問題輸出的結果和我們預期的不一樣。
測試用例不是用來證明你是對的,是用來證明你們沒有錯。
測試用例用來達到想要的預期結果,但對於邏輯錯誤無能為力。
error是有代碼異常引起的,它可以產生於測試代碼本身的錯誤,也可以是測試代碼中一個隱藏的bug
CalculateTest.java
public class CalculateTest { @Test public void testAdd() { assertEquals(6, new Calculate().add(3,3)); } @Test public void testSubtract() { assertEquals(3, new Calculate().subtract(5,2)); } @Test public void testMultiply() { assertEquals(4, new Calculate().multiply(2, 2)); } @Test public void testDivide() { assertEquals(3, new Calculate().divide(6, 2)); }}
ErrorAndFailureTest.java
public class ErrorAndFailureTest { /* * 1.Failure一般由單元測試使用的斷言方法判斷失敗所引起的,這經表示 測試點發現了問題 * ,就是說程序輸出的結果和我們預期的不一樣。 * 2.error是由代碼異常引起的,它可以產生於測試代碼本身的錯誤,也可以是被測試代碼中的 * 一個隱藏的bug * 3.測試用例不是用來證明你是對的,而是用來證明你沒有錯。 */ @Test public void testAdd() { assertEquals(5, new Calculate().add(3,3)); } @Test public void testDivide() { assertEquals(3, new Calculate().divide(6, 0)); }}
2、使用詳解
生命周期
JunitFlowTest.java
public class JunitFlowTest { /* * 1.@BeforeClass修飾的方法會在所有方法被調用前被執行, * 而且該方法是靜態的,所以當測試類被載入後接著就會運行它, * 而且在內存中它只會存在一份實例,它比較適合載入配置文件。 * 2.@AfterClass所修飾的方法通常用來對資源的清理,如關閉資料庫的連接 * 3.@Before和@After會在每個測試方法的前後各執行一次。 * */ @BeforeClass public static void setUpBeforeClass() throws Exception { System.out.println("this is beforeClass..."); } @AfterClass public static void tearDownAfterClass() throws Exception { System.out.println("this is afterClass..."); } @Before public void setUp() throws Exception { System.out.println("this is before..."); } @After public void tearDown() throws Exception { System.out.println("this is after"); } @Test public void test1() { System.out.println("this is test1..."); } @Test public void test2(){ System.out.println("this is test2..."); }}
@BeforeClass-->@Before-->@Test1-->@After-->@Before-->@Test2-->@After-->@AfterClass
AnotationTest.java
public class AnotationTest { @Test(expected=ArithmeticException.class) public void testDivide() { assertEquals(3, new Calculate().divide(6, 0)); } @Ignore("...") @Test(timeout=2000) public void testWhile() { while(true) { System.out.println("run forever..."); } } @Test(timeout=3000) public void testReadFile(){ try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
3、深入使用
測試套件(測試套件就是組織測試類一起運行的)使用步驟:
SuiteTest.java
@RunWith(Suite.class)@Suite.SuiteClasses()public class SuiteTest { /* * 1、寫一個作為測試套件的入口類,這個類里不包含其他的方法 * 2、更改測試運行器Suite.class * 3、將要測試的類作為數組傳入到Suite.SuiteClasses({}) */}
TaskTest1.java(TaskTest2、TaskTest3)模板一樣
參數化設置
ParameterTest.java
@RunWith(Parameterized.class)public class ParameterTest { /* * 1.更改默認的測試運行器為RunWith(Parameterized.class) * 2.聲明變數來存放預期值 和結果值 * 3.聲明一個返回值 為Collection的公共靜態方法,並使用@Parameters進行修飾 * 4.為測試類聲明一個帶有參數的公共構造函數,並在其中為之聲明變數賦值 */ int expected =0; int input1 = 0; int input2 = 0; @Parameters public static Collection t() { return Arrays.asList(new Object[][]{ , }) ; } public ParameterTest(int expected,int input1,int input2) { this.expected = expected; this.input1 = input1; this.input2 = input2; } @Test public void testAdd() { assertEquals(expected, new Calculate().add(input1, input2)); }}
※java第三季老師布置的作業:隨機字元串
※程序員,你的強迫症是幾級?進來對號入座!
TAG:java學習吧 |
※教程 | 如何使用 Kubernetes 輕鬆部署深度學習模型
※Premiere自學教程
※TensorFlow和深度學習入門教程
※RabbitMQ學習系列教程五四:Topic的使用
※photoshop教程|UI教程|cake圖標
※史萊姆牧場BetterBuild使用教程
※RabbitMQ學習系列教程六:Fanout交換機的使用
※Opus Magnum新手操作教程
※Snapseed教程
※snapseed修圖教程
※【進階篇】Recurrent Group教程
※Sqlmap使用教程
※Python 標準庫之 collections 使用教程
※PullOver簡單使用教程
※Python之Sklearn使用教程
※欲學機器學習必先掌握Shell,AI工程師自製教程,獲Reddit網友400+點贊
※Python之日誌處理-logging模塊使用教程
※Spring Boot 基礎教程 ( 二 ) :快速構建 Spring Boot/Cloud 工程
※官方推薦!用TensorFlow 2.0做深度學習入門教程
※PS學習教程攝影后期 Photoshop影樓後期修圖實用技巧