我有一个测试,它发送并向'subtract'方法返回一些不同的值。 第一个列表包含方法的结果。 第二个列表包含预期的解决方案。 这看起来有点笨重,看起来和/或感觉都不干净。 有办法吗? 与Hamcrest, 让同样的测试更简洁? 也许有一个较小的列表声明或直接在断言中有一个列表。
@Test
public void verifySubtractWillReturnCorrectValues() {
List<Double> results = new ArrayList<Double>(Arrays.asList(
aCalc.subtract(14, 4),
aCalc.subtract(10.0, 1),
aCalc.subtract(0b1111, 0b0011),
aCalc.subtract(3.0F, 4.0F),
aCalc.subtract(1L, 1L)));
List<Double> solutions = new ArrayList<Double>() {{add(10.0); add(9.0); add(12.0); add(-1.0); add(0.0);}};
assertThat(results, equalTo(solutions));
}
答案 0 :(得分:0)
回答一般问题:'我怎样才能对集合的内容做一个简洁的断言'......
Hamcrest可用于使断言更简洁,例如:
assertThat(results, Matchers.hasItems(10.0, 9.0, 12.0, -1.0, 0.0));
assertThat(results, Matchers.containsInAnyOrder(10.0, 9.0, 12.0, -1.0, 0.0));
同样,使用AssertJ:
assertThat(results).containsExactlyInAnyOrder(10.0, 9.0, 12.0, -1.0, 0.0);
但是,您的测试似乎是为subtract()
方法断言几个离散输入的输出。您可以单独测试这些,从而完全消除“集合上的断言”的问题。例如:
assertThat(aCalc.subtract(14, 4), is(10.0));
assertThat(aCalc.subtract(10.0, 1), is(9.0));
// ... etc
答案 1 :(得分:0)
问题似乎是您在一个单元测试方法的上下文中执行了五个实际测试。 将它们分成单独的测试。 虽然明显不那么紧凑, 这种技术清楚地表明了每次测试的实际意图。
以下是一些示例代码:
@Test
public void subtractTwoInts()
{
final Double actualResult;
final Double expectedResult = 10.0;
actualResult = aCalc.subtract(14, 4);
assertEquals(
expectedResult,
actualResult);
}
@Test
public void subtractIntFromFloat()
{
final Double actualResult;
final Double expectedResult = 9.0;
actualResult = aCalc.subtract(10.0, 1);
assertEquals(
expectedResult,
actualResult);
}