Java 让JUnitRunner使用不同的参数多次运行测试类

Java 让JUnitRunner使用不同的参数多次运行测试类,java,unit-testing,junit4,Java,Unit Testing,Junit4,我有一些jUnit4测试类,我想用注释中传递的不同参数运行多次。例如,像这样: @RunWith(MyClassRunner.class) @Params("paramFor1stRun", "paramFor2ndRun") class MyTest { @Test public void doTest() {..} } 我想Runner可以帮我,但我不知道如何实现。你能给我一些建议吗 您需要将注释@RunWith(Parameterized.class)添加到测试中 然后,使用所需

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

@RunWith(MyClassRunner.class)
@Params("paramFor1stRun", "paramFor2ndRun")
class MyTest {
  @Test
  public void doTest() {..}
}
我想Runner可以帮我,但我不知道如何实现。你能给我一些建议吗

  • 您需要将注释
    @RunWith(Parameterized.class)
    添加到测试中
  • 然后,使用所需的参数为类创建构造函数:

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


  • 如果使用注释
    @Parameter(value=N)
    其中N是参数数组的索引,则无需定义构造函数即可获得更快的方法。

    是否有方法以不同的名称运行这些测试?我的意思是,在Jenkins中,我需要观察这些类的运行:MyTest.doTest[paramsforstrun],MyTest.doTest[paramsforndrun]这个线程是否回答了您的问题。它似乎从JUnit4.11开始就存在了。谢谢,我决定创建自己的测试运行程序,但是参数化的运行程序帮助我理解了很多。也许我将来会使用它来管理我的测试。这是JUnit不是现实生活框架的又一个很好的证明。简单地初始化两个数组并在循环中调用它们比post建议的方式更简单方便。通过数组,您可以对任何测试函数执行此操作,而不是为其创建单独的测试类。或者使用TestNG。当然,我的评论并不反对post-+1-我尊重那些即使是JUnit也能做好工作的人。(就我个人而言,我总是写不同的跑步者)除了给出答案之外,你可能还想看看这个:
    @Parameters
    public static Collection<Object[]> data() {
      Object[][] data = {{"p11","p12"},{"p21","p22"}}
      return Arrays.asList(data);
    }
    
    @Test
    public void myTest() {  
        assertEquals(this.param1,this.param2);
    }