根据我所看到的,有两种验证测试的方法。
首先是状态验证,在这里我可以断言某些==某些东西。 然后是行为验证,在这里我可以检查模拟中的方法是否被称为X次。
在我看来,我想测试一个接口,而不关心方法是如何执行或实现的。 我关心方法的结果或结果。 根据我的经验,检查是否在模拟程序上调用了一个方法,这会使我的代码变得脆弱。
因此,将模拟上的验证方法称为最佳实践(或行为验证)吗?
并非所有测试都是一样的。
许多对象无法进行行为测试,因为被测系统未与协作者进行交互,只有结果验证才有意义。
其他人无法通过结果进行测试,因为被测系统不返回结果或没有副作用。
例如,如果您需要验证被测系统是否向外部系统发送了消息,则只能将该外部系统表示为模拟,而您要验证的方面是被测系统向外部调出系统。
我要修改这一声明说,你很可能在已经调用的外部API比你在什么被发送的事实不感兴趣。 您仍然使用该模拟程序,而不是仅验证一次方法被调用,而是验证传递给该方法的参数是否符合预期。
换句话说,验证行为有时是进入系统的唯一窗口,可用于验证状态。