您有一个X类,并且编写了一些验证行为X1的单元测试。还有一个类A,它把X作为依赖项。
为A编写单元测试时,您将模拟X。换句话说,在对A进行单元测试时,您将(假设)X的模拟行为设置为X1。时间的流逝,人们确实在使用您的系统,需要改变,X演变:您修改X以显示行为X2。显然,针对X的单元测试将失败,您需要对其进行调整。
但是A呢?修改X的行为后(由于X的模拟),针对A的单元测试不会失败。当使用“真实”(修改的)X运行时,如何检测A的结果会有所不同?
我期望得到以下答案:“这不是单元测试的目的”,但是单元测试有什么价值呢?它真的只是告诉您,当所有测试通过时,您还没有进行重大更改吗?当某个班级的行为发生变化时(有意或无意),您如何发现(最好以自动化方式)所有后果?我们不应该更多地关注集成测试吗?
X1
您是说X
实现接口X1
。如果你改变了接口X1
,以X2
您在其他测试中使用的模拟不应再编译,因此你不得不解决这些测试过。班级行为的变化不重要。实际上,您的类A
不应依赖于实现细节(在这种情况下,这将是您要更改的)。因此,对于的单元测试A
仍然是正确的,并且它们告诉您A
在接口的理想实现下可以进行的工作。