Pergunta

Alguém poderia explicar por que ambos os testes usando as últimas versões de estruturas Moq e Rhino.Mocks falha reclamando que Bar não é um método virtual / substituível:

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

Se eu declarar método Bar como virtual ambos os testes passar. Eu não entendo por que tenho a declarar Bar como virtual. Não é já virtual? Ela vem da interface.

Foi útil?

Solução

Virtual é parte da classe não a interface, por isso, se você deseja substituir o método na classe Foo você precisará declará-lo como virtual.

No entanto, como Krzysztof menciona se tudo que você precisa são os métodos na interface IFoo então você deve zombar da interface.

Outras dicas

Porque você está zombando de classe Foo. Mock IFoo intefrace vez

var foo = new MockRepository().PartialMock<IFoo>();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top