【问题标题】:How to run selected junit tests with different parameters如何使用不同的参数运行选定的 junit 测试
【发布时间】:2015-07-21 14:00:57
【问题描述】:

我想从任何具有不同参数的测试类中运行选定的测试方法

例如:1) ClassA -> 测试方法 A、B

@Test
public void testA(String param) {
    System.out.println("From A: "+param);
}
@Test
public void testB(String param) {
}

2) ClassB -> 测试方法 C、D

@Test
public void testC(String param) {
    System.out.println("From C: "+param);
}
@Test
public void testD(String param) {
}

从这些我想运行以下测试
1) testA(来自 ClassA)两次,差异参数为“test1”和“test2”
2)testC(来自ClassB)两次,差异参数“test3”和“test3”

这里我的测试计数应该显示为“4”

谁能帮忙解决这个问题...

【问题讨论】:

  • 您的测试运行情况如何。您使用的是 IDE 还是 Maven 之类的构建工具?

标签: java junit customization parameterized


【解决方案1】:

使用 Junits 提供的参数化测试,您可以在运行时传递参数。

请参阅org.junit.runners.Parameterized(JUnit 4.12 提供了在设置数组中使用预期值和不使用预期值进行参数化的可能性)。

试试这个:

@RunWith(Parameterized.class)
public class TestA {

   @Parameterized.Parameters(name = "{index}: methodA({1})")
   public static Iterable<Object[]> data() {
      return Arrays.asList(new Object[][]{
            {"From A test1", "test1"}, {"From A test2", "test2"}
      });
   }

   private String actual;
   private String expected;

   public TestA(String expected,String actual) {
      this.expected = expected;
      this.actual = actual;
   }

   @Test
   public void test() {
      String actual = methodFromA(this.actual);
      assertEquals(expected,actual);
   }

   private String methodFromA(String input) {
      return "From A " + input;
   }
}

你可以为 B 类写一个类似的测试。

对于仅采用单个参数的测试,从 JUnit 4.12 开始,您可以这样做:

@RunWith(Parameterized.class)
public class TestU {

    /**
     * Provide Iterable to list single parameters
     */

    @Parameters
    public static Iterable<? extends Object> data() {
        return Arrays.asList("a", "b", "c");
    }

    /**
     * This value is initialized with values from data() array
     */

    @Parameter
    public String x;

    /**
     * Run parametrized test
     */

    @Test
    public void testMe() {
        System.out.println(x);
    }
}

【讨论】:

  • 这也是正确答案。需要为参数化方法中的动态参数编写代码并赋值给数组。
【解决方案2】:

尝试使用 JUnit 参数化测试。这是tutorial from TutorialsPoint.com

JUnit 4 引入了一个名为参数化测试的新功能。参数化测试允许开发人员使用不同的值一遍又一遍地运行相同的测试。创建参数化测试需要遵循五个步骤。

  • 使用@RunWith(Parameterized.class) 注释测试类。

  • 创建一个使用@Parameters 注释的公共静态方法,该方法返回一个对象集合(作为数组)作为测试数据集。

  • 创建一个公共构造函数,它接收相当于一“行”测试数据的内容。

  • 为测试数据的每个“列”创建一个实例变量。

  • 使用实例变量作为测试数据的来源创建您的测试用例。

每行数据都会调用一次测试用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多