Frage

Könnte jemand erklären, warum beiden Tests die neuesten Versionen von Moq und Rhino.Mocks Frameworks fail beschweren, dass Bar ist keine virtuelle / überschreibbare Methode:

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());
}

Wenn ich Bar Methode als virtuelles erklären passieren beiden Tests. Ich verstehe nicht, warum ich Bar als virtuelle zu erklären haben. Ist es nicht schon virtuell? Es stammt aus der Schnittstelle.

War es hilfreich?

Lösung

Virtuelle Teil der Klasse ist nicht die Schnittstelle, so, wenn Sie die Methode für die Klasse Foo zu überschreiben Sie es als virtuelle erklären müssen.

Da jedoch Krzysztof erwähnt, wenn alles, was Sie benötigen die Methoden auf der Schnittstelle IFoo sind, dann sollten Sie die Schnittstelle verspotten.

Andere Tipps

Weil Sie Foo Klasse sind spöttisch. Mock IFoo intefrace statt

var foo = new MockRepository().PartialMock<IFoo>();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top