在一个参数化类(junit)中创建多个参数集

新手上路,请多包涵

目前我必须为每个我想用几个不同输入测试的方法创建一个参数化测试类。有没有办法将它们一起添加到一个文件中?

现在有 CalculatorTestAdd.java 有一组参数,用于检查 Add() 函数是否正常工作。我有没有可能将这个集合“连接”到 Add() 函数并创建一个额外的集合用于 Subtract() 方法并将这个方法添加到同一个测试类中,导致一个名为 CalculatorTest.java 的文件?

原文由 Jeroen Vannevel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 310
2 个回答

是的。您无需做任何特别的事情。对于参数的每一组值,每个@Test 方法都运行一次,因此只需一个方法测试 add(),另一个方法测试 subtract()。

我还可以补充一点,口述此要求的人被误导了。 “针对所有情况”指定某些设计模式没有什么价值——不妨雇用训练有素的猴子。

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

这个答案类似于 Tarek 的答案(参数化部分),尽管我认为它更具可扩展性。还可以解决您的问题,如果一切正确,您将不会失败的测试:

 @RunWith(Parameterized.class)
public class CalculatorTest {
    enum Type {SUBSTRACT, ADD};
    @Parameters
    public static Collection<Object[]> data(){
        return Arrays.asList(new Object[][] {
          {Type.SUBSTRACT, 3.0, 2.0, 1.0},
          {Type.ADD, 23.0, 5.0, 28.0}
        });
    }

    private Type type;
    private Double a, b, expected;

    public CalculatorTest(Type type, Double a, Double b, Double expected){
        this.type = type;
        this.a=a; this.b=b; this.expected=expected;
    }

    @Test
    public void testAdd(){
        Assume.assumeTrue(type == Type.ADD);
        assertEquals(expected, Calculator.add(a, b));
    }

    @Test
    public void testSubstract(){
        Assume.assumeTrue(type == Type.SUBSTRACT);
        assertEquals(expected, Calculator.substract(a, b));
    }
}

原文由 nessa.gp 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题