使用'传统'记录/重放与Moq模型进行模拟

Fun*_*ung 9 unit-testing moq mocking

我是嘲笑的新手,我决定使用模拟框架.该起订量家报价

目前,它是唯一一个与所有其他框架中的广义和有点不直观(特别是对于新手)记录/回复方法相对的模拟库.

任何人都可以简单地解释记录/重放方法是什么以及Moq有何不同之处?从决定框架的角度来看,每个人的利弊是什么?

谢谢.

Bas*_*ink 7

RhinoMocks支持Record/Replay方法.基本思想是您的测试执行分为两个阶段,即记录阶段和重放阶段.更具体一点

var repo = new MockRepository();
var dependency = repo.DynamicMock<IDependency>();
With.Mocks(repo).Expecting(delegate {
         Expect.Call(dependency.AMethod(1)).Return(result);                    
      }).Verify(delegate {
         var sut = new Sut(wrappee);
         sut.DoStuffThatCallsAMethod();
         Assert.IsTrue(sut.ResultState);
      });
Run Code Online (Sandbox Code Playgroud)

因此,Expecting块是Record阶段,Verify块是Replay阶段.

该代码的Moq变体将是

var dependency = new Mock<IDependency>();
dependency.Expect(dep => dep.AMethod(1)).Returns(result);          
var sut = new Sut(wrappee.Object);
sut.DoStuffThatCallsAMethod();
Assert.IsTrue(sut.ResultState);
Run Code Online (Sandbox Code Playgroud)

您可以看到哪个更好阅读.我曾经使用RhinoMocks但是因为我发现Moq我只使用Moq.我发现它可以生成更易读的代码.所以我的建议是去Moq.

  • 这个答案对我来说没有多大意义.当然,Moq变体更简单,但你仍然在测试中有这两个阶段:第2行(调用"Expect")属于"记录"阶段,而第3和第4行属于"重放"阶段.我不认为语法上的差异对于"记录/重放"模型至关重要. (9认同)