【问题标题】:Make jUnit runner run test class multiple times with different parameters让 jUnit runner 使用不同的参数多次运行测试类
【发布时间】:2016-04-28 08:49:35
【问题描述】:

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

@RunWith(MyClassRunner.class)
@Params("paramFor1stRun", "paramFor2ndRun")
class MyTest {
  @Test
  public void doTest() {..}
}

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

【问题讨论】:

标签: java unit-testing junit4


【解决方案1】:
  1. 您需要将注解@RunWith(Parameterized.class) 添加到您的测试中。

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

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

    @Parameters
    public static Collection<Object[]> data() {
      Object[][] data = {{"p11", "p12"}, {"p21", "p22"}};
      return Arrays.asList(data);
    }
    
  4. 你可以做你的测试,它将为你的数组的每一行执行:

    @Test
    public void myTest() {  
        assertEquals(this.param1,this.param2);
    }
    

如果你使用注解@Parameter(value = N),你有一个更快的方法,而无需定义构造函数,其中 N 是你的参数数组的索引。

【讨论】:

  • 有没有办法以不同的名称运行这些测试?我的意思是,在 Jenkins 中,我需要观察这些类的运行情况:MyTest.doTest[paramsFor1stRun], MyTest.doTest[paramsFor2ndRun]
  • 这个帖子能回答你的问题吗? stackoverflow.com/questions/650894/…。它似乎从 JUnit 4.11 开始就存在了。
  • 谢谢,我决定创建自己的测试运行器,但是参数化运行器帮助我理解了很多。可能我将来会用它来管理我的测试
  • 这是另一个很好的证据,证明 JUnit 不是现实生活中的框架。两个数组的简单初始化并循环调用它们比帖子建议的方式更短更方便。通过数组,您可以为任何测试函数执行此操作,而不是为其创建单独的测试类。或者使用TestNG。当然,我的评论并不反对帖子 - +1 - 我尊重即使是 JUnit 也能很好地工作的人。 (就个人而言,我总是写不同的跑步者)
猜你喜欢
  • 2014-02-19
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
相关资源
最近更新 更多