为什么我们需要模拟框架?

San*_*box 17 .net c# nunit moq mocking

我使用过编写过NUnit测试的代码.但是,我从未使用过模拟框架.这些是什么?我理解依赖注入以及它如何帮助提高可测试性.我的意思是所有依赖项都可以在单元测试时进行模拟.但是,为什么我们需要模拟框架呢?我们不能简单地创建模拟对象并提供依赖关系.我在这里错过了什么吗?谢谢.

flq*_*flq 12

  • 它使模拟更容易
  • 它们通常允许您表达可测试的断言,这些断言引用对象之间的交互.

这里有一个例子:

var extension = MockRepository
    .GenerateMock<IContextExtension<StandardContext>>();
  var ctx = new StandardContext();
  ctx.AddExtension(extension);
  extension.AssertWasCalled(
    e=>e.Attach(null), 
    o=>o.Constraints(Is.Equal(ctx)));
Run Code Online (Sandbox Code Playgroud)

您可以看到我明确地测试了IContextExtension的Attach方法被调用,并且输入参数是上述对象.如果没有发生,它会使我的测试失败.


Jus*_*ner 11

您可以手动创建模拟对象并在使用依赖注入框架进行测试期间使用它们......但是让模拟框架为您生成模拟对象可以节省时间.

与往常一样,如果使用框架增加了太多的复杂性,那么就不要使用它.


Rex*_*x M 7

有时,在使用第三方库,甚至使用.NET框架的某些方面时,在某些情况下编写测试非常困难 - 例如,HttpContext或Sharepoint对象.为那些创建模拟对象会变得非常繁琐,因此模拟框架会处理基础知识,因此我们可以花时间专注于使我们的应用程序独特的原因.