java - JUnit 中的参数化测试方法,而不仅仅是整个类

标签 java junit testng data-driven-tests testng-dataprovider

我想在 JUnit 中创建一个数据驱动的参数化方法

我看到的示例对整个进行了参数化。

例如

@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {

但是,我想参数化单个测试方法,而不是整个

在 TestNG 中,类似的东西看起来像这样:

@DataProvider(name = "test1")
public static Object[][] primeNumbers() {
   return new Object[][] {{2, true}, {6, false}, {19, true}, {22, false}, {23, true}};
}

// This test will run 4 times since we have 5 parameters defined
@Test(dataProvider = "test1")
public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) {
   System.out.println(inputNumber + " " + expectedResult);
   Assert.assertEquals(expectedResult,
   primeNumberChecker.validate(inputNumber));
}

这种事情在 JUnit 中可能吗?

编辑:

  1. 最优雅/DRY 的方式是使用单个方法级注释 - 这正是我所希望的。

  2. 我找到了一个图书馆:

https://github.com/Pragmatists/junitparams

例子:

@RunWith(JUnitParamsRunner.class)
public class PersonTest {

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

}

问题仍然存在 - JUnit 中是否内置了类似的东西?

如果不是,那么需要最少样板代码或类级扭曲的最接近内置的东西是什么?

最佳答案

您可以使用 @RunWith(Suite.class)@Suite.SuiteClasses 将您的外部类变成一个套件,然后在内部嵌套类(定义套件的“子测试类”),每个都有自己的运行者。

@RunWith(Suite.class)
@Suite.SuiteClasses({MyFooTest.Individual.class, MyFooTest.WithParams.class})
public class MyFooTest {

  @RunWith(Parameterized.class)
  public static class WithParams {
    @Parameterized.Parameters
    public static Collection<Object[]> primeNumbers() {
      ...
    }
    @Test
    public void testPrimeNumberChecker() {
      ...
    }
    ...
  }

  public static class Individual {
    @Test
    public void someOneOffTest() {
      ...
    }
    ...
  }
}

关于java - JUnit 中的参数化测试方法,而不仅仅是整个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537855/

相关文章:

java - Spring batch Writer 直接将文件写入 ftp 位置,

java - ConstraintViolationException,我应该期望它被抛出然后处理它吗?或者我应该阻止它被抛出?

java - 如何使程序将文件从包复制到 java 中的 user.dir?

java - 以编程方式启用或禁用 TestNG 中的断言

java - 查找两个日期之间的差异

android - 如何将 testCompile 依赖项添加到 IDE 类路径

java - 关于单元测试结构的思考

java - Mockito,无法初始化 JNDI 或来自 servlet 容器的任何内容

java - 如何从 Maven 命令行运行 testng.xml

java - 如何传递 Jenkins 配置来覆盖自动化配置