如何断言多个变量具有相同的值?

时间:2018-04-07 03:26:31

标签: java unit-testing junit android-junit

我正在为计算函数编写一个jUnit测试

double calculate(double val1, double val2);

如果输入被“翻转”,预计该函数将返回相同的结果,即首先出现哪一个并不重要,如果它们是负数或正数,则无关紧要(只要它们相等)符号)。

以下都应该产生相同的结果:

calculate(1.5, 4.7);
calculate(4.7, 1.5);
calculate(-1.5, -4.7);
calculate(-4.7, -1.5);

但是这有一个缺点,即当其中一个失败时终止测试方法。

我目前的测试只是做了4个单独的断言:

assertEquals( 9.472, result1, 0.001 );
assertEquals( 9.472, result2, 0.001 );
assertEquals( 9.472, result3, 0.001 );
assertEquals( 9.472, result4, 0.001 );

但是这有一个缺点,即当其中一个失败时终止测试方法。使用数组进行测试也是如此:

assertArrayEquals(
        new double[]{9.472, 9.472, 9.472, 9.472},
        new double[]{result1, result2, result3, result4},
        0.001);

我想出的另一个选择是使用

简单断言它们都是平等的
assertTrue( result1 == result2 && result2 == result3 && result3 == result4 );

但是它的缺点是在失败时不告诉你实际值。

测试这样的东西的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

这听起来恰恰是parameterized tests的用途。

您的测试方法只是

@Test
public void testCommutativity() {
    assertEquals(calculate(a, b), calculate(b, a), .001);
}

你的参数方法就像是

@Parameters
public static Collection<Object[]> data() {
    return Arrays.asList(new Object[][] {     
             { 1.5, 4.7 }, { -1.5, -4.7 }
       });
}

您甚至可以在返回参数之前以编程方式更改参数(使一个或两个都为负)。