好的,所以这可能是一个危险的问题。我已经做了一段时间的单元测试,但是由于某种原因,我今天早上醒来,问了自己这个问题。
假设我有一个 UserFactory 接口,它有 CreateUser 方法。
在某些时候我需要创建一个用户权利?因此,我创建了一个测试,检查是否在适当的位置为 UserFactory 调用了 CreateUser。
现在,单元测试与实际代码非常耦合——这很好。但也许有点太多了?如中所示,打破测试的唯一方法是不调用 CreateUser。我们没有检查它的实现等,而只是检查接口是否被调用。但是,无论谁删除了该调用,都会有一个失败的测试,并最终从验证 CreateUser 被调用的步骤中删除验证语句。
我已经看到这种情况一遍又一遍地发生。
有人可以把灯带回给我并解释为什么验证模拟对象的方法已被调用是有益的吗?我可以理解为什么设置它们可能很有用,比如 CreateUser 应该为代码的后面部分返回一个虚拟用户,但是在我们简单且仅验证它们是否被调用的地方是让我着迷的部分。
谢谢!