【问题标题】:Unit Testing - how to properly calculate expected value for assertion单元测试 - 如何正确计算断言的期望值
【发布时间】:2018-07-17 18:05:58
【问题描述】:

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

public Integer getTotalBeforeSubscriptionDiscount() {
  return getTotal() + getSubscriptionSavings()
}

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

Integer expected = 10;
Integer actual = obj.getTotalBeforeSubscription();
assertEquals(expected, actual);

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

Integer expected = obj.getTotal() + obj.getSubscriptionSavings();
assertEquals(expected, obj.getTotalBeforeSubscription());

【问题讨论】:

    标签: java unit-testing junit


    【解决方案1】:

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

    如果您在 getTotal() 实现中引入错误,您的第二个选项仍然会通过,但会丢失错误。

    所以答案是,使用明确的数字,或者至少使用不同的代码,例如expected = expectedTotal + expectedSavings。

    【讨论】:

      【解决方案2】:

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

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

      代码应如下所示:

      @Test
      public void shouldReturnSumOfTotalAndSubscriptionSavings() {
          Class obj = new ClassA();
          obj.setTotal(10);
          obj.setSubcriptionSavings(12);
      
          Integer actual = obj.getTotalBeforeSubscription();
      
          assertThat(actual, is(22));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 2012-09-26
        • 1970-01-01
        相关资源
        最近更新 更多