簡體   English   中英

不同測試的不同參數化參數JUNIT

[英]Different Parametrized arguments for different Tests JUNIT

好的,所以我正在為項目構建測試用例,並且正在使用JUnit進行測試。 現在我面臨的問題是,對於同一文件的不同測試用例,我需要使用不同的參數集。

public class ForTesting{
    //Test 1 should run on ips {1, true} and {2,true}
    @Test
    public void Test1()
    {
        //Do first Test case
    }
    //Test 2 should run on ips {3,true} and {4,true}
    @Test
    public void Test2()
    {
        //Do another Test case
    }
}

我知道我可以使用參數化參數提供多個參數,但是問題是所有測試用例都運行相同的參數集。 有沒有辦法做到這一點?

如果您不只是在尋找標准的junit參數化測試,並且根據公司的法律政策,則可以(至少)使用以下2個庫,這使事情更容易(實現和閱讀):

1) JUnitParams (Apache 2)

@RunWith(JUnitParamsRunner.class)
public class PersonTest {

  @Test
  @Parameters({"17, false", 
               "22, true" })
  public void shouldDecideAdulthood(int age, boolean expectedAdulthood) throws Exception {
    assertThat(new Person(age).isAdult(), is(expectedAdulthood));
  }
}

2) Zohhak (LGPL)受JUnit參數啟發,但為表帶來了更多的糖 (簡單的分隔符配置,轉換器等)

@RunWith(ZohhakRunner.class)
public class PersonTest {

  @TestWith({"17, false", 
             "22, true" })
  public void shouldDecideAdulthood(int age, boolean expectedAdulthood) throws Exception {
    assertThat(new Person(age).isAdult(), is(expectedAdulthood));
  }
}


鳴謝:上面的示例已從JUnitParams的自述文件中無恥地復制和調整了。

幾種選擇:

使用理論

在@Theory中,使用Assume.assumeThat

@Theory
public void shouldPassForSomeInts(int param) {
     Assume.assumeTrue(param == 1 || param == 2);
}

@Theory
public void shouldPassForSomeInts(int param) {
     ...
}

或使用@TestedOn

@Theory
public void shouldPassForSomeInts(@TestedOn(ints={1, 2}) int param) {
     ...
}

@Theory
public void shouldPassForSomeInts(@TestedOn(ints={3,4}) int param) {
     ...
}

暫無
暫無

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

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