Question

Quelqu'un pourrait-il expliquer pourquoi les deux tests utilisant les dernières versions des infrastructures Moq et Rhino.Mocks échouent en se plaignant que Bar n'est pas une méthode virtuelle / pouvant être remplacée:

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

Si je déclare que la méthode Bar est virtuelle, les deux tests réussissent. Je ne comprends pas pourquoi je dois déclarer Bar comme virtuel. N'est-ce pas déjà virtuel? Cela vient de l'interface.

Était-ce utile?

La solution

Virtual fait partie de la classe et non de l'interface. Par conséquent, si vous souhaitez remplacer la méthode de la classe Foo, vous devez la déclarer comme virtuelle.

Cependant, comme le dit Krzysztof, si vous avez uniquement besoin des méthodes de l'interface IFoo, vous devez vous moquer de l'interface.

Autres conseils

Parce que vous vous moquez de la classe Foo. Mock IFoo intefrace à la place

var foo = new MockRepository().PartialMock<IFoo>();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top