不同测试的不同参数化参数JUNIT

时间:2016-06-30 19:10:25

标签: java 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
    }
}

我知道我可以使用参数化参数提供多个参数,但问题是针对所有测试用例运行的同一组参数。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

如果您不仅仅查看标准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 params的启发,但为表格提供了一些more sugar(简单的分隔符配置,转换器等)

@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&#39;中无耻地复制和调整。自述。

答案 1 :(得分:1)

几个选项:

使用Theories

在@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) {
     ...
}