我需要在UT中仔细检查流量吗?

时间:2014-09-30 14:02:51

标签: java unit-testing mocking mockito

我有一个具有依赖关系A的课程B

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

的流程

假设A::foo(..)来电B::foo(..)

我是否必须编写A::("a", "a")的UT?

我会注入B :: foo mock并检查它是否被调用过一次,并且A的结果是预期的,因为来自B的模拟结果。

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

您是否已经在B UT?

中检查了整个流程

2 个答案:

答案 0 :(得分:0)

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

  

我会注入B :: foo mock并检查它是否被调用过一次,并且A的结果是预期的,因为来自B的模拟结果。

你需要问问自己这样做有多少。如果A是简单包装B

  • 此类A测试的价值有多大?
  • A代码中的错误有多难被发现?
  • 这有多容易?
  • 有多难修复?

每个单元测试都是一个决定。没有“是的,为此类编写测试”指南或规则。您需要确定是否可以花时间为包装类编写单元测试,或者将其投入其他地方是否更好。

答案 1 :(得分:0)

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

此时,编写A::foo的单元测试可能是多余的,除非你断言它准确地返回(某些排列)B::foo。如jimmy_keen said,这可能意味着您对A的测试是微不足道的。请记住,单元测试旨在涵盖可能会破坏的内容,因此如果您拥有的是包装器,则可能不需要进行全面测试。

(警告:如果B不在您的控制范围内,并且您无法对其完美性充满信心,请尽可能在任何地方添加B测试 - 包括单独的测试类,或者在ATest中。这是一个单独的抽象破坏案例。)