使用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);
}
}
答案 0 :(得分:6)
如果要对条形对象进行存根,则应对属性值
进行断言Assert.AreEqual(7, mockBar.Name);
如果你想测试期望,你应该生成mock而不是stub
var mockBar = MockRepository.GenerateMock<IBar>();
foo.MyMethod(mockBar);
mockBar.AssertWasCalled(b => b.Model = 7);
Difference between stubs and mocks:
模拟是一个我们可以设定期望的对象,以及将要设置的期望 验证确实发生了预期的操作。存根是一个 您用于传递给测试代码的对象。您可以 设定对它的期望,所以它会以某种方式行动,但那些 期望永远不会得到验证。存根的属性会 自动表现得像普通属性,你无法设置 对他们的期望。
如果要验证被测代码的行为,您将会这样做 使用具有适当期望的模拟,并验证。如果你 只想传递一个可能需要以某种方式行动的价值,但是 不是这个测试的重点,你将使用存根。