gpt4 book ai didi

c# - 为什么 Rhino.Mocks 和 Moq 说 Bar 是不可覆盖的成员?

转载 作者:太空宇宙 更新时间:2023-11-03 19:37:41 26 4
gpt4 key购买 nike

有人可以解释为什么使用最新版本的 Moq 和 Rhino.Mocks 框架的两个测试都失败并提示 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 声明为虚拟的。不是已经虚拟了吗?它来自界面。

最佳答案

Virtual 是类的一部分而不是接口(interface)的一部分,因此如果您希望重写类 Foo 上的方法,您需要将其声明为 virtual。

但是正如 Krzysztof 提到的那样,如果您只需要接口(interface) IFoo 上的方法,那么您应该模拟该接口(interface)。

关于c# - 为什么 Rhino.Mocks 和 Moq 说 Bar 是不可覆盖的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/455853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com