有人能解释为什么用起订量和Rhino.Mocks框架的最新版本,这两个测试失败抱怨酒吧是不是虚拟/重写方法:Rhino.Mocks和Moq为什么说Bar是不可覆盖的成员?
public interface IFoo
{
string Bar();
}
public class Foo : IFoo
{
public string Bar()
{
return "Bar";
}
}
[TestMethod]
public void MoqTest()
{
var foo = new Mock<Foo>();
foo.Setup(f => f.Bar()).Returns("abc");
Assert.AreEqual("abc", foo.Object.Bar());
}
[TestMethod]
public void RhinoTest()
{
var foo = new MockRepository().PartialMock<Foo>();
foo.Expect(f => f.Bar()).Return("abc");
foo.Replay();
Assert.AreEqual("abc", foo.Bar());
}
如果我宣布酒吧方法,虚拟两个测试通过。我不明白为什么我必须将Bar声明为虚拟。它不是虚拟的吗?它来自界面。
是的,这是正确的。事实上,我在Bar类中有另外一个不是虚拟的方法,它叫Bar。这是我正在测试的这种方法,我想模拟对Bar的调用。 – 2009-01-18 20:56:57
所以我原来的问题仍然存在。我知道在Bar的声明中添加虚拟代码并不需要太多花费,但我只是想知道为什么两个框架都以这种方式运行。这种行为背后必然有一些原因。 – 2009-01-18 20:59:30