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