验证模拟是最佳实践吗? (行为验证)

时间:2014-05-13 14:46:41

标签: mocking tdd

从我所看到的,有两种验证测试的方法。

首先是状态验证我可能会断言= =某事。 然后是行为验证,我可能会检查模拟器上的方法被调用X次。

在我看来,我想测试一个接口,我不关心方法是如何执行或实现的。我关心被调用方法的结果或结果。根据我的经验,检查是否在模拟上调用方法会使我的代码变脆。

因此,验证模拟上的方法被称为(或行为验证)是一种最佳实践吗?

1 个答案:

答案 0 :(得分:2)

并非所有测试都是平等的。

许多人无法进行行为测试,因为被测系统没有与合作者互动,只有结果验证才有意义。

其他人无法通过结果进行测试,因为被测系统不会返回结果或产生副作用。

例如,如果您需要验证被测系统是否向外部系统发送了消息,您只能将该外部系统表示为模拟,并且您要验证的方面是您所测试的系统被调出到外部系统。

我将修改该声明,说你可能对调用外部API的事实不太感兴趣,而不是发送的。您仍然使用模拟,但不是仅仅验证方法被调用一次,而是验证传递给该方法的参数是否符合预期。

换句话说,验证行为有时是进入系统的唯一窗口,可用于验证状态。