嘲弄的目的

Ron*_*rby 6 tdd unit-testing moq mocking testdrivendesign

嘲笑的目的是什么?

我一直在关注一些使用NUnit进行测试和使用Moq进行模拟的ASP.NET MVC教程.虽然我对它的嘲弄部分有点不清楚.

phi*_*ant 16

模拟的目的是将被测试的类与其他类隔离开来.

这在课时很有用:

  • 连接到外部资源(FileSystem,DB,network ...)
  • 设置昂贵,或者尚未提供(正在开发的硬件)
  • 减慢单元测试的执行速度
  • 具有非确定性行为
  • 拥有(或是)用户界面

它还可以更容易地测试错误条件,因为您构建模拟对象以便返回错误,抛出异常...

模拟可以记录它是如何被调用的(函数调用顺序,参数),这可以通过测试来验证.编辑:例如:您正在测试的方法发送消息,例如IPC.模拟对象的方法可以记录它被调用的次数,即他接收的参数(即要发送的消息).然后测试可以询问模拟对象并断言发送的消息数量,消息的内容......同样,模拟对象可以记录在日志字符串中调用的方法,测试可以检索该字符串并断言在上面.

不要滥用模拟对象:测试行为而不是实现,否则单元测试将与代码紧密耦合,并且脆弱(在重构时中断).

模拟可以手动编码,也可以由模拟框架生成.


tva*_*son 7

Mocking允许您将测试中的类与其依赖项隔离开来.通常,您为要测试的类的每个依赖项创建一个模拟,并设置模拟以返回预期值.然后,您将模拟提供给正在测试的类,而不是您所测试的类所依赖的类的实际副本.然后,您可以使用模拟框架检查是否对模拟对象进行了预期的调用,以确保您的测试类正常运行.