L'approccio di registrazione/riproduzione è supportato da RhinoMocks. L'idea di base è che l'esecuzione del test è divisa in due fasi, la fase di registrazione e la fase di riproduzione. Per essere un po 'più concreto
var repo = new MockRepository();
var dependency = repo.DynamicMock<IDependency>();
With.Mocks(repo).Expecting(delegate {
Expect.Call(dependency.AMethod(1)).Return(result);
}).Verify(delegate {
var sut = new Sut(wrappee);
sut.DoStuffThatCallsAMethod();
Assert.IsTrue(sut.ResultState);
});
Quindi il blocco Prevedendo è la fase di registrazione e il blocco di verifica è la fase di riproduzione.
La variante Moq di questo codice sarebbe
var dependency = new Mock<IDependency>();
dependency.Expect(dep => dep.AMethod(1)).Returns(result);
var sut = new Sut(wrappee.Object);
sut.DoStuffThatCallsAMethod();
Assert.IsTrue(sut.ResultState);
che come potete vedere è molto più bello da leggere. Ho usato RhinoMocks ma da quando ho scoperto Moq uso solo Moq. Trovo che sia un codice molto più leggibile. Quindi il mio consiglio sarebbe di andare per Moq.
fonte
2009-03-16 14:45:53
Questa risposta non ha molto senso per me. Certo, la variante di Moq è più semplice, ma hai ancora quelle due fasi nel test: la riga 2 (con la chiamata a "Expect") appartiene alla fase "record", mentre le righe 3 e 4 appartengono alla fase "replay" . Non penso che le semplici differenze nella sintassi siano essenziali per ciò che è il modello "record/replay". –