单元测试 - 如何正确计算断言的期望值

Abd*_*tah 2 java junit unit-testing

我是单元测试的新手,我只是想知道如果一个方法在内部调用自己的公共方法来计算返回值,如下所示:

public Integer getTotalBeforeSubscriptionDiscount() {
  return getTotal() + getSubscriptionSavings()
}
Run Code Online (Sandbox Code Playgroud)

我正在为它编写单元测试,我的问题是:我应该使用特定的整数值来匹配结果,结果与期望,例如

Integer expected = 10;
Integer actual = obj.getTotalBeforeSubscription();
assertEquals(expected, actual);
Run Code Online (Sandbox Code Playgroud)

OR是否允许调用公共方法并在运行时计算期望值,如下所示:

Integer expected = obj.getTotal() + obj.getSubscriptionSavings();
assertEquals(expected, obj.getTotalBeforeSubscription());
Run Code Online (Sandbox Code Playgroud)

小智 5

在测试和被测试的类中使用相同的代码对你没有好处.

如果您在getTotal()实现中引入错误,您的第二个选项仍然会通过,错过了该错误.

所以答案是,使用显式数字,或至少使用不同的代码,例如expected = expectedTotal + expectedSavings.


Thi*_*iru 3

单元测试被视为正在测试的代码的文档。话虽如此,在查看您的测试时,它应该演示代码的用途。

在你的情况下,getTotalBeforeSubscriptionDiscount方法,总结totalsubscriptionSavings。因此,在您的测试中,最好明确提及这一点。

代码应该如下所示:

@Test
public void shouldReturnSumOfTotalAndSubscriptionSavings() {
    Class obj = new ClassA();
    obj.setTotal(10);
    obj.setSubcriptionSavings(12);

    Integer actual = obj.getTotalBeforeSubscription();

    assertThat(actual, is(22));
}
Run Code Online (Sandbox Code Playgroud)