我正在使用C#,虽然这个问题可能适用于任何语言。
我有两种方法A和B. A做了一些事情并且有5个单元测试。 B基本上与A相同,但也做了其他事情。 B在其实现中调用A.
如何测试A和B?复制和粘贴A的测试似乎是很多不必要的重复。 如果A属于另一个类,我们可以模拟该类并验证A被调用,但是看到A是与B相同的类的一部分,我们在这里不能这样做。
在这种情况下,最佳做法是什么?
答案 0 :(得分:2)
我认为奥利弗有正确的想法,但我会尝试解释它,因为它似乎仍然存在一些混乱。
首先为方法A编写一组测试。然后当你为B编写一组测试时,你应该只测试B中的功能。当你为B编写测试时,你应该假设A完美,因为你已经测试过了。在这种情况下,我不担心嘲笑A.
作为旁注,我怀疑A不需要公开。它是从课外打来的吗?如果没有,我会将其设为私有,然后编写一组测试,测试A到B.
或者,如果A足够复杂,你想要单独测试它,那么它可能需要保证被分解为自己的助手类。然后你可以嘲笑它。如果你想要的话。
如果您可以提供一些示例代码,那么也可以更轻松地为您提供帮助。
答案 1 :(得分:0)
因此,只需编写测试,以了解您期望B方法应该做什么。如果它在内部调用另一个私有或公共方法,或者可能通过内部代码实现相同的克隆(或其他)对您无关紧要。
每次测试只测试一件事。如果您拥有A的所有测试和B的所有测试,并且您进行了任何重大更改,您将从测试环境中获得通知。