为什么要计算在单元测试中调用函数的次数

时间:2018-03-09 12:49:25

标签: unit-testing testing

我的新同事不断地坚持要我计算在进行后端单元测试时调用单元测试中的函数的次数。我可以看到为什么它有时会有所帮助,但在大多数情况下我觉得它是多余的和不必要的。从我的角度来看,调用哪个函数以及调用它的次数都无关紧要。重要的是进入和检查预期行为的内容。

单元测试应该更像是一个黑盒子,因为无论你如何得到答案,但是如果答案是否正确则很重要。如果我总是在验证一些函数被调用的次数,那么会产生很多开销。这也意味着每次我改变解决问题的方法时,我的单元测试都会中断,我需要每次修复它。我觉得这种方法限制了编码员的灵活性。

有谁能告诉我为什么要进行这类单元测试?谢谢。

更具体地说,代码在java中,结构概述如下:控制器处理api调用并调用相关的Facade,后者又调用服务来获取数据。外观是服务的组合,服务与数据库通信。这些"单元测试"需要对所有三个层执行。例如。检查控制器中每个外观被调用的次数。并检查外观中的每个服务是否被调用以及调用它的次数。

2 个答案:

答案 0 :(得分:1)

  

有人可以告诉我为什么要进行这类单元测试吗?

一般来说,它不应该。调用函数的次数是私有实现细节。单元测试测试单元的公共行为,而不是私有实现。

与每个通用语句一样,也有例外:调用方法的次数在断言组件的功能是否正确时可能很有用。例如,我曾经构建了一个缓存系统,您可以在缓存中放置一个缓存并检查它是否正常工作,不仅让管道传递正确的结果,而且应该只调用producer方法一旦。如果它被多次调用,那么缓存的实现就出错了。

但正如我所说,这是一个合理的例外。一般来说,调用方法的次数不是测试标准。

答案 1 :(得分:0)

请考虑您有以下方法

public void ChargeCreditCard(string cardNumber, decimal amount)

如果信用卡被骗一次或多次,这很重要,对吗?

我通常总是测试调用方法的次数。首先,它以某种方式保证不会偶然调用该方法或多或少。 至于这种检查增加额外开销的说法,这并不完全正确。如果您在设计代码和测试时使用了良好的实践,那么测试这样的东西应该很容易。此外,大多数模拟框架提供了开箱即用的这种测试。