簡體   English   中英

參數化方法的JUnit測試

[英]JUnit test with parametrized method

這是一個單元測試類:

MyUnitTestSetup myUnitTestSetup ;

public void setUp(String myParam){
  myUnitTestSetup = new MyUnitTestSetup(myParam);
}

@Test
public void test1(){
  setUp("value1");
  //do some stuff with myParam = "value1";
}

@Test
public void test2(){
  setUp("value2");
  //do some stuff with myParam = "value2";
}

我想用“ value1”執行test1,用“ value2”執行test2。 參數化單元測試不方便,因為它們將對“ value1”和“ value2”執行test1,而對“ value1”和“ value2”執行test2,這不是我想要的。

我雖然:

  • 每次進行測試時都要調用設置方法。
  • 使用@Rule注釋:

     static String myParam; MyUnitTestSetup myUnitTestSetup ; @Before public void setUp(){ myUnitTestSetup = new MyUnitTestSetup(myParam); } @Rule public TestRule rule = new TestRule() { @Override public Statement apply(final Statement base, final Description desc) { return new Statement() { @Override public void evaluate() throws Throwable { if(desc.getMethodName().equals("test1")) myParam = "value1"; ... } }; } } @Test public void test1(){ //do some stuff with myParam = "value1"; } @Test public void test2(){ //do some stuff with myParam = "value2"; } 

但是我想知道是否有一種更清潔,更智能的方式來做到這一點。 我會想到類似的東西:

MyUnitTestSetup myUnitTestSetup ;

@Before
public void setUp(String myParam){
  myUnitTestSetup = new MyUnitTestSetup(myParam);
}

@Test(myParam="value1")
public void test1(){
  //do some stuff with myParam = "value1";
}

@Test(myParam="value2")
public void test2(){
  //do some stuff with myParam = "value2";
}

任何想法 ?

我在這里想念什么嗎? 為什么不將其設置為測試調用中的第一件事,還是調用設置方法的方法呢?

@Test
public void test1(){
  myParam = "value1"; //set the value?
  ...
}

@Test
public void test2(){
  setupMyParam("value2"); // or this?
  ...
}

不確定是否可以使用TestNG ,但是如果可以的話,TestNG允許您1)將參數直接傳遞給測試方法,以及2)為每個類定義所需數量的數據提供程序。 例如:

@DataProvider
public Object[][] dp1() {
    return new Object[][] {
        new Object[] { "value1"};
    }
}

@Test(dataProvider = "dp1")
public void test1(String value) {
    // will receive "value1"
}

@DataProvider
public Object[][] dp2() {
    return new Object[][] {
        new Object[] { "value2"};
    }
}

@Test(dataProvider = "dp2")
public void test2(String value) {
    // will receive "value2"
}

看一下JUnitParams庫。 有了它,您可以執行以下操作:

@Test
@Parameters({ new MyUnitTestSetup("value1") })
public void test1(MyUnitTestSetup myUnitTestSetup1) {
  // do some stuff with myUnitTestSetup1
}

@Test
@Parameters({ new MyUnitTestSetup("value2") })
public void test2(MyUnitTestSetup myUnitTestSetup2) {
  // do some stuff with myUnitTestSetup2
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM