当前位置: 首页 > 知识库问答 >
问题:

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

梁宪
2023-03-14

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

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());

共有2个答案

洪胤
2023-03-14

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

在您的例子中,getTotalBeforeSubscriptionDiscount方法汇总了总预订量和预订节省量。所以,在测试中,最好明确提到这一点。

代码应该如下所示:

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

    Integer actual = obj.getTotalBeforeSubscription();

    assertThat(actual, is(22));
}

易研
2023-03-14

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

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

所以答案是,使用显式数字,或者至少使用不同的代码,例如预计=预期总计预期储蓄

 类似资料:
  • 我有这个带有Apache Camel的Restendpoint来查找来自不同来源的一些值,首先我验证请求,然后根据路径我去不同的路由: 这是我测试路线的一次尝试: 这是日志: 我是测试 Apache Camel 路由的新手,有人可以帮助我了解问题在哪里或如何验证输出,因为您可以看到交换对象主体在那里并通过。我已经尝试了一些方法来模拟这个endpoint,但似乎没有任何效果,我的想法也没了。

  • 我正在尝试使用测试驱动设计方法编写一个应用程序--我对单元测试很陌生,所以我只是想知道测试正确输入和异常的正确方法是什么。 我有一个用于加载配置文件的类: null 另外,这3个测试是否都有try{}catch(){}语句?在第一个测试中,正确性是隐含的,在第二个和第三个测试中,我无论如何都在检查异常,所以异常对测试没有影响。

  • 我试图计算select元素中的选项数,以及DOM中某个类的元素数。 我需要比较这两个总数来得出赛普拉斯的断言。 我可以选择所需的选项,并使用each()对它们进行迭代,然后以这种方式递增一个计数器。然而,它是异步的,也是一个笨拙的解决方案。我确信我的cy.get()生成的对象有一个length属性,我就是看不懂它。 这是我期望的事情之一。它将未定义的日志记录到控制台。 我知道我的别名很好,并且我的

  • 我正在学习使用JUnit。我编写了一个生成严格小于xx的数字的方法。 我想用JUnit测试它。不确定使用哪个断言是基于xX的,我也没有看到任何比较断言。

  • 我确实看到了一些关于在SonarQube中安装Groovy插件的相关答案,但是没有提到这是用于哪一个版本的SonarQube的解决方案(我不再看到这个插件可用)

  • 如何正确断言呢?