我需要再次检查UT中的流量吗



我有一个具有依赖项B的类A

我给B::foo(String s1, String s2)写了一篇UT。假设我测试B::foo("a", "a")

假设A::foo(..)调用B::foo(..)

我必须写一份A::("a", "a")的UT吗?

我会注入B::foo mock,并检查它是否被调用过一次,并且在给定来自B的模拟结果的情况下,来自A的结果也是预期的。

在这种情况下你会避免嘲笑吗?

你会避免整个流程吗,因为它已经在B UT中检查过了?

单元测试是抵御软件错误的额外防线。很可能在生产代码中产生错误,在单元测试中产生相同错误的可能性要小得多。这就是您编写单元测试的原因之一——以获得更多的保证,确保您的软件按预期工作。

我会注入B::foo mock,并检查它是否被调用过一次,并且在给定来自B的模拟结果的情况下,来自A的结果也是预期的。

你需要问问自己这样做能获得多少收益。如果AB 的简单包装

  • 这样的A测试有多大价值
  • A代码中的错误检测起来有多难
  • 制作起来有多容易
  • 修复起来有多难

每一次单元测试都是要做出的决定。没有"是的,为这个类编写测试"准则或规则。您需要确定您的时间是否可以花在编写包装类的单元测试上,或者将其投资于其他地方是否更好。

B::foo是经过单元测试的,因此最好的做法是假设它是完美的。如果你有理由怀疑B::foo是完美的,那么在BTest中添加测试,直到你对它感到满意,然后假设它是完美的。

在这一点上,编写A::foo的单元测试可能是多余的,除非您断言它准确地返回(某种排列)B::foo。正如jimmy_keen所说,这可能意味着你对A的测试是微不足道的。请记住,单元测试是为了覆盖可能出现故障的内容而设计的,因此,如果您只有一个包装器,那么您可能不需要进行彻底的测试。

(注意:如果B不在您的控制之下,并且您无法对其完美性充满信心,请尽一切可能在任何位置添加B测试——包括一个单独的测试类或ATest。不过,这是一个单独打破抽象的情况。)

相关内容

  • 没有找到相关文章

最新更新