Java單元測試工具:JUnit4(四)——JUnit測試套件使用及參數化設置


轉自:https://blog.csdn.net/Zen99T/article/details/50572373?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158819271619724846417283%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=158819271619724846417283&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v25-3

(四)JUnit測試套件使用及參數化設置
        這篇筆記記錄JUnit測試套件的使用,即批量運行測試類;以及JUnit中的參數化設置。
        @RunWith
  當類被@RunWith注解修飾,或者類繼承了一個被該注解修飾的類,JUnit將會使用這個注解所指明的運行器(runner)來運行測試,而不是JUnit默認的運行器。
1.JUnit測試套件
        如果在測試類不端增加的情況下,如何運行所有的單元測試代碼類?一個個測試類的執行嗎?顯然繁瑣且費勁。
        將要運行的測試類集成在我們的測試套件中,比如一個系統功能對應一個測試套件,一個測試套件中包含多個測試類,每次測試系統功能時,只要執行一次測試套件就可以了。
1.1 測試類及測試套件代碼
        新建3個測試任務類:
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 代碼:
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 運行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM