使列表比较更简洁
Making a list comparison more concise
我有一个测试发送 returns 一些不同的值到 'subtract' 方法。
第一个列表包含该方法的结果。
第二个列表包含预期的解决方案。
这看起来有点笨重而且看起来 and/or 感觉不是很干净。
有没有办法,
与哈姆克雷斯特,
有相同的测试更简洁?
也许有一个较小的列表声明或直接在断言中有一个列表。
@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));
}
回答一般问题:'how can I make a concise assertion on the contents of a collection' ...
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()
方法的多个离散输入的输出。您可以单独测试这些,从而完全消除 'assert on a collection' 的问题。例如:
assertThat(aCalc.subtract(14, 4), is(10.0));
assertThat(aCalc.subtract(10.0, 1), is(9.0));
// ... etc
问题似乎是您在一个单元测试方法的上下文中执行了五个实际测试。
将它们分成单独的测试。
虽然明显不那么紧凑,
这种技术明确了每个测试的实际意图。
下面是一些示例代码:
@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);
}
我有一个测试发送 returns 一些不同的值到 'subtract' 方法。 第一个列表包含该方法的结果。 第二个列表包含预期的解决方案。 这看起来有点笨重而且看起来 and/or 感觉不是很干净。 有没有办法, 与哈姆克雷斯特, 有相同的测试更简洁? 也许有一个较小的列表声明或直接在断言中有一个列表。
@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));
}
回答一般问题:'how can I make a concise assertion on the contents of a collection' ...
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()
方法的多个离散输入的输出。您可以单独测试这些,从而完全消除 'assert on a collection' 的问题。例如:
assertThat(aCalc.subtract(14, 4), is(10.0));
assertThat(aCalc.subtract(10.0, 1), is(9.0));
// ... etc
问题似乎是您在一个单元测试方法的上下文中执行了五个实际测试。 将它们分成单独的测试。 虽然明显不那么紧凑, 这种技术明确了每个测试的实际意图。
下面是一些示例代码:
@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);
}