当前位置:  开发笔记 > 编程语言 > 正文

为什么Rhino.Mocks和Moq说Bar是一个不可覆盖的成员?

如何解决《为什么Rhino.Mocks和Moq说Bar是一个不可覆盖的成员?》经验,为你挑选了1个好方法。

有人可以解释为什么使用最新版本的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.Setup(f => f.Bar()).Returns("abc");
    Assert.AreEqual("abc", foo.Object.Bar());
}

[TestMethod]
public void RhinoTest()
{
    var foo = new MockRepository().PartialMock();
    foo.Expect(f => f.Bar()).Return("abc");
    foo.Replay();
    Assert.AreEqual("abc", foo.Bar());
}

如果我将Bar方法声明为虚拟,则两个测试都通过.我不明白为什么我必须将Bar声明为虚拟.它不是已经虚拟了吗?它来自界面.



1> Ken Henderso..:

Virtual是类的一部分而不是接口,因此如果您希望覆盖类Foo上的方法,则需要将其声明为虚拟.

然而,正如Krzysztof所提到的,如果你需要的只是接口IFoo上的方法,那么你应该模拟接口.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有