我是新来的嘲笑和我决定一个模拟框架。该起订量主场报价

  

目前,它是唯一的嘲讽   库违背了   广义的,有点不直观   (特别是新手)记录/回复   从所有其他框架的方法。

任何人都可以简单地解释一下记录/重播方法是和起订量有何不同?什么各自的优点和缺点尤其从判定的框架的点?

感谢。

有帮助吗?

解决方案

在记录/重播方法由 RhinoMocks 支撑。其基本思路是,你的测试执行分为两个阶段,备案阶段和重放阶段。到一点点更具体

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);
      });

因此,期待块是记录相和验证块是重播阶段。

此代码的变体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);

正如你可以看到的是更漂亮阅读。我曾经使用RhinoMocks但因为我发现,起订量我只用起订量。我觉得这是产生更可读的代码。所以我的建议是去起订量。

其他提示

RhinoMocks实际上是非常灵活,你可以使用两种方法。 RhinoMocks看起来指望/验证风格比下起订量好一点。但是,即使你可以使用这种风格的事实被埋没在文件(我最后一次看)。我们在我当前的项目挑选起订量超过RhinoMocks,因为我们没有意识到,它并安装/验证。

记录/重播语法确实给你改变一个方法将返回在后续调用该方法的价值的能力。有时这可能是有用的。说了这么多,需要做这往往是一种气味,你的设计是不完全正确。这虽然时,你可以很明白什么是错的有用,你必须继续前进。

起订量确实具有改变值的能力,但它有些笨重(来自文档)

// returning different values on each invocation 
var mock = new Mock<IFoo>(); 
var calls = 0; 
mock.Setup(foo => foo.GetCountThing())
.Returns(() => calls)
.Callback(() => calls++); 

,因为它使得它很难在什么存根/嘲笑或只是运行代码的设置看,我已经走了马上记录/重放。我相信,有犀牛的工作多种方式。特别地,可以使用一个using()块以隔离从其它呼叫设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top