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>();
    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を仮想として宣言する必要がある理由がわかりません。すでに仮想ではありませんか?それはインターフェースから来ています。

4

2 に答える 2

5

Virtual はインターフェイスではなくクラスの一部であるため、クラス Foo のメソッドをオーバーライドする場合は、それを virtual として宣言する必要があります。

ただし、Krzysztof が言及しているように、必要なのはインターフェイス IFoo のメソッドだけである場合は、インターフェイスをモックする必要があります。

于 2009-01-18T20:59:06.020 に答える
1

あなたはFooクラスを嘲笑しているからです。代わりにIFoointerfraceをモックします

var foo = new MockRepository().PartialMock<IFoo>();
于 2009-01-18T20:54:13.457 に答える