2012-07-25 56 views
4

这可能是一个非常蹩脚的问题,但我需要问一个问题。为什么要嘲笑库?为什么要嘲笑仓库?

如果您使用硬编码值创建对象,然后使用Moq将它们作为接口上方法调用的值返回(即不执行),那么您究竟测试了什么?

回答

3

像其他的答案说,你为了测试客户端做到这一点,库(或数据库,或外部服务,或其他),但有两个关键原因为什么我们这样做:

  1. 为确保重复性和创建特殊情况下:你希望能够知道你正在测试不随时间消退什么。如果您的存储库正在更改,您无法确定现在有效的功能以前是否有效。此外,您可以确定现在可能未出现在存储库中的异常情况(可能是没有社会安全号码的用户,或类似的模糊但可能的情况),并将其包括在您的测试中,从而确保未来的兼容性。

  2. 删除依赖关系:您希望尽可能简化测试。测试所依赖的每个外部资源是定期测试的又一障碍。如果你嘲笑你的仓库,那么即使仓库不存在或缺失,也可以针对你的客户端运行测试。例如,如果一个程序挂接到“真实”数据库,他们的测试套件可能会使用本地(甚至是在内存中)SQLite数据库来测试他们的数据库行为,并且这样运行测试的人不会需要配置或连接到实际的数据库,并且发生的任何更改或错误都不会影响共享数据库资源。

+0

很好的答案,谢谢! – 2012-07-25 15:53:31

1

您将测试使用该存储库的客户端。

I.E.是使用存储库对已知的一组对象进行正确处理的服务。

1

在这种情况下,一般或嘲讽的时候,你测试你的存储库,而是测试一个给定的类,你的SUT(System Under Test),正确使用存储库,例如通过调用方法(可能按照正确的顺序)。

嘲笑使用行为验证,而不是状态验证。

这意味着你使用mock来测试你的SUT是否正确运行,而不是在测试用例的末尾有正确的状态。

Jeremy Miller有一些关于此主题的niceblog posts