Java單元測試工具:JUnit4(四)——JUnit測試套件使用及引數化設定
阿新 • • 發佈:2018-12-14
(四)JUnit測試套件使用及引數化設定
這篇筆記記錄JUnit測試套件的使用,即批量執行測試類;以及JUnit中的引數化設定。 @RunWith當類被@RunWith註解修飾,或者類繼承了一個被該註解修飾的類,JUnit將會使用這個註解所指明的執行器(runner)來執行測試,而不是JUnit預設的執行器。
1.JUnit測試套件
如果在測試類不端增加的情況下,如何執行所有的單元測試程式碼類?一個個測試類的執行嗎?顯然繁瑣且費勁。將要執行的測試類整合在我們的測試套件中,比如一個系統功能對應一個測試套件,一個測試套件中包含多個測試類,每次測試系統功能時,只要執行一次測試套件就可以了。
1.1 測試類及測試套件程式碼
新建3個測試任務類:
[java]
view plain
copy
- package jtzen9.util;
- import org.junit.Test;
- public class TaskTest1 {
- @Test
- public void test() {
- System.out.println("this is TaskTest1...");
- }
- }
- package jtzen9.util;
- import org.junit.Test;
- public class TaskTest2 {
- @Test
- public void test() {
- System.out.println("this is TaskTest2...");
- }
- }
- package jtzen9.util;
- import org.junit.Test;
- public class TaskTest3 {
- @Test
- public void test() {
- System.out.println("this is TaskTest3...");
- }
- }
- package jtzen9.util;
- import org.junit.runner.RunWith;
- import org.junit.runners.Suite;
- @RunWith(Suite.class)
- @Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})
- public class SuiteTest {
- /*
- * 1.測試套件就是組織測試類一起執行的
- *
- * 寫一個作為測試套件的入口類,這個類裡不包含其他的方法
- * 更改測試執行器Suite.class
- * 將要測試的類作為陣列傳入到Suite.SuiteClasses({})
- */
- }
1.2 說明
①使用@RunWith註解,修改測試執行器。例如@RunWith(Suite.class),這個類就成為測試套件的入口類。 ②@Suite.SuiteClasses()中放入測試套件的測試類,以陣列的形式{class1,class2,......}作為引數2.JUnit引數化設定
如果測試程式碼大同小異,程式碼結構都是相同的,不同的只是測試的資料和預期值,那麼有沒有更好的辦法將相同的程式碼結構提取出來,提高程式碼的重用度呢?解決:進行引數化測試。 步驟: ①要進行引數化測試,需要在類上面指定如下的執行器:@RunWith (Parameterized.class)
②然後,在提供資料的方法上加上一個@Parameters註解,這個方法必須是靜態static的,並且返回一個集合Collection。
③在測試類的構造方法中為各個引數賦值,(構造方法是由JUnit呼叫的),最後編寫測試類,它會根據引數的組數來執行測試多次。
2.1 程式碼:
[java] view plain copy- package jtzen9.util;
- import static org.junit.Assert.*;
- import java.util.Arrays;
- import java.util.Collection;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.junit.runners.Parameterized;
- import org.junit.runners.Parameterized.Parameters;
- @RunWith(Parameterized.class) //1.更改預設的測試執行器為RunWith(Parameterized.class)
- public class ParameterTest {
- //2.宣告變數存放預期值和測試資料
- int expected =0;
- int input1 = 0;
- int input2 = 0;
- //3.宣告一個返回值 為Collection的公共靜態方法,並使用@Parameters進行修飾
- @Parameters
- public static Collection<Object[]><object> data() {
- return Arrays.asList(new Object[][]{
- {3,1,2},
- {4,2,2}
- }) ;
- }
- //4.為測試類宣告一個帶有引數的公共建構函式,並在其中為之宣告變數賦值
- public ParameterTest(int expected,int input1,int input2) {
- this.expected = expected;
- this.input1 = input1;
- this.input2 = input2;
- }
- //5.執行測試方法,即可完成對多組資料的測試
- @Test
- public void testAdd() {
- assertEquals(expected, new Calculate().add(input1, input2));
- }
- }</object>
2.2 執行結果
看了慕課網的JUnit視訊教程: http://www.imooc.com/learn/356,總結筆記。