使用Rhino Mocks 3.6,鉴于下面的代码,我希望AssertWasCalled断言能够通过,但事实并非如此。而是有失败的断言消息:
“ Rhino.Mocks.Exceptions.ExpectationViolationException:
IBar.set_Model(7);预期#1,实际#0。”
尝试使用IgnoreArguments()不会更改结果,但是将IBar属性更改为方法并断言使用参数调用该方法确实有效。
我在这里想念什么?
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Rhino.Mocks;
public interface IFoo { }
public interface IBar { int Model { get; set; } }
public class Bar : IBar { public int Model { get; set; } }
public class Foo : IFoo
{
public void MyMethod(IBar bar)
{
bar.Model = 7;
}
}
[TestClass]
public class TestFoo
{
[TestMethod]
public void MyMethod()
{
var foo = new Foo();
var mockBar = MockRepository.GenerateStub<IBar>();
foo.MyMethod(mockBar);
mockBar.AssertWasCalled(b => b.Model = 7);
}
}
最佳答案
如果要存入bar对象,则应该对property的值进行断言
Assert.AreEqual(7, mockBar.Name);
如果要测试期望,则应生成模拟而不是存根
var mockBar = MockRepository.GenerateMock<IBar>();
foo.MyMethod(mockBar);
mockBar.AssertWasCalled(b => b.Model = 7);
Difference between stubs and mocks:
模拟是可以设定期望值的对象,它将
验证确实已发生预期的操作。存根是一个
您用来传递给被测代码的对象。您可以
设定期望值,因此它会以某些方式起作用,但是那些
期望永远不会得到证实。存根的属性将
自动行为就像普通属性一样,您无法设置
对他们的期望。
如果要验证被测代码的行为,您将
使用具有适当期望的模拟,然后进行验证。如果你
只是想传递可能需要以某种方式行事的价值,但是
不是该测试的重点,您将使用存根。