我目前正在研究我们应该如何在即将到来的项目中进行测试。为了在开发过程中及早发现错误,开发人员会在实际代码之前编写单元测试(TDDish)。单元测试将像他们应该的那样,孤立地关注单元(在这种情况下是一种方法),因此依赖关系将被模拟等等。
现在,我还想在这些单元与其他单元交互时对其进行测试,并且我认为应该有一个有效的最佳实践来做到这一点,因为单元测试已经编写好了。我的想法是单元测试将被重用,但模拟对象将被删除并替换为真实对象。我现在的不同想法是:
- 在每个测试类中使用一个全局标志来决定是否应该使用模拟对象。这种方法需要几个
if
语句 - 使用创建“instanceWithMocks”或“instanceWithoutMocks”的工厂类。这种方法对于新开发人员来说使用起来可能会很麻烦,并且需要一些额外的类
- 将集成测试与不同类中的单元测试分开。然而,这将需要大量冗余代码,维护测试用例将是工作的两倍
在我看来,所有这些方法都有利有弊。其中哪一个是首选,为什么?有没有更好的方法来有效地从单元测试过渡到集成测试?或者这通常以其他方式完成?