让 jUnit 运行程序使用不同的参数多次运行测试类

awf*_*fun 7 java unit-testing junit4

我有一些 jUnit4 测试类,我想使用注释中传递的不同参数运行多次。例如,像这样:

@RunWith(MyClassRunner.class)
@Params("paramFor1stRun", "paramFor2ndRun")
class MyTest {
  @Test
  public void doTest() {..}
}
Run Code Online (Sandbox Code Playgroud)

我认为 Runner 可以帮助我,但我不知道如何实现。你能给建议吗?

Aka*_*kah 6

  1. 您需要将注释添加@RunWith(Parameterized.class)到您的测试中。

  2. 然后,使用所需的参数为您的类创建一个构造函数:

    public Test(String pParam1, String param2) {
        this.param1 = pParam1;
        this.param2 = pParam2;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后,声明一个像这样的方法(它提供与构造函数相对应的参数数组):

    @Parameters
    public static Collection<Object[]> data() {
      Object[][] data = {{"p11", "p12"}, {"p21", "p22"}};
      return Arrays.asList(data);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 您可以进行测试,该测试将对数组的每一行执行:

    @Test
    public void myTest() {  
        assertEquals(this.param1,this.param2);
    }
    
    Run Code Online (Sandbox Code Playgroud)

如果您使用注释,@Parameter(value = N)其中 N 是参数数组的索引,则无需定义构造函数,您就有了一种更快的方法。