我有一个用户控件,它在我想测试的ValidateChildren方法中做了一些验证。我已经创建了用户控件的部分模拟,但是虽然我没有对ValidateChildren方法设置任何期望,但我只是简单地调用它,它会被略过并且方法内的代码永远不会执行。要尝试理解是怎么回事我创建了一个简单的测试,像这样:即使没有设定预期,为什么我的部分模拟模拟了所有虚拟方法?
public class Foo
{
public virtual bool Method1()
{
throw new NotImplementedException();
}
public virtual bool Method2()
{
return Method1();
}
}
,并用它来测试它:
[Test]
public void TestFooMethods()
{
MockRepository m = new MockRepository();
Foo foo = m.PartialMock<Foo>();
RhinoMocksExtensions.Expect<Foo,bool>(
foo,
delegate (Foo obj)
{
return obj.Method1();
}
).Return(true);
Assert.IsTrue (foo.Method2());
}
现在我希望foo.Method1被嘲笑和Foo方法2不是。但是,这总是返回false,如果我尝试在调试器中逐步执行foo.Method2(),我不能介入它。
任何想法为什么?
这似乎不工作,因为我会想到。我遇到问题: Rhino.Mocks.Exceptions.ExpectationViolationException:Foo.Method1();预期#1,实际#0。我打电话给RhinoMocksExtensions.VerifyAllExpectations(foo); ,我仍然需要调用RhinoMocksExtensions.Replay(foo);在我验证期望之前。我有点困惑,为什么虽然,如果我通过代码Method2被调用,我可以介入并看到它调用Method1(),所以它为什么声称它不叫我不知道。 – 2009-04-30 09:53:16