如何断言多个变量具有相同的值?
How to assert that multiple variables have the same value?
我正在为计算函数编写 jUnit 测试
double calculate(double val1, double val2);
如果输入是 "flipped",函数预计会 return 相同的结果,也就是说,哪个先出现并不重要,它们是负数还是正数(只要它们具有等号)。
以下都应该产生相同的结果:
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 );
但这有一个缺点,就是失败时不会告诉您实际值。
测试此类内容的最佳方法是什么?
这听起来正是 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 }
});
}
您甚至可以在返回参数之前以编程方式更改您的参数(使一个或两个都为负数)。
我正在为计算函数编写 jUnit 测试
double calculate(double val1, double val2);
如果输入是 "flipped",函数预计会 return 相同的结果,也就是说,哪个先出现并不重要,它们是负数还是正数(只要它们具有等号)。
以下都应该产生相同的结果:
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 );
但这有一个缺点,就是失败时不会告诉您实际值。
测试此类内容的最佳方法是什么?
这听起来正是 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 }
});
}
您甚至可以在返回参数之前以编程方式更改您的参数(使一个或两个都为负数)。