Question

Je suis nouveau pour me moquer et je suis en train de choisir un cadre factice. Les Moq home citations

  

Actuellement, c'est le seul railleur   bibliothèque qui va à l'encontre du   généralisé et peu intuitif   (surtout pour les novices) Enregistrement / Réponse   approche de tous les autres cadres.

Quelqu'un peut-il expliquer simplement quelle est l'approche Record / Replay et en quoi Moq diffère? Quels sont les avantages et les inconvénients de chacun, en particulier en ce qui concerne le choix d’un cadre?

Merci.

Était-ce utile?

La solution

L’approche d’enregistrement / relecture est prise en charge par RhinoMocks . L'idée de base est que votre test est divisé en deux phases: la phase d'enregistrement et la phase de relecture. Pour être un peu plus concret

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

Le bloc en attente est donc la phase d’enregistrement et le bloc de vérification est la phase de relecture.

La variante Moq de ce code serait

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

Ce qui, comme vous pouvez le voir, est beaucoup plus agréable à lire. J'avais l'habitude d'utiliser RhinoMocks mais depuis que j'ai découvert Moq, je n'utilise que Moq. Je trouve que cela produit un code beaucoup plus lisible. Donc, mon conseil serait d'aller pour Moq.

Autres conseils

RhinoMocks est en fait très polyvalent, vous pouvez utiliser l’une ou l’autre approche. RhinoMocks est un peu meilleur que Moq dans le style attendre / vérifier. Cependant, même le fait que vous puissiez utiliser ce style est enterré dans la documentation (la dernière fois que j'ai regardé). Nous avons choisi Moq plutôt que RhinoMocks dans mon projet actuel, car nous ne savions pas qu'il était configuré / vérifié.

La syntaxe record / replay vous donne la possibilité de changer la valeur qu'une méthode retournera lors d'appels ultérieurs à cette méthode. Cela peut être utile parfois. Cela dit, le besoin de le faire est souvent le signe que votre conception n’est pas tout à fait correcte. C'est utile quand on sait ce qui ne va pas et qu'il faut passer à autre chose.

Moq a la possibilité de changer la valeur mais c'est un peu maladroit (d'après la documentation)

// returning different values on each invocation 
var mock = new Mock<IFoo>(); 
var calls = 0; 
mock.Setup(foo => foo.GetCountThing())
.Returns(() => calls)
.Callback(() => calls++); 

Je suis tout de suite sorti de Record / Replay, car il est difficile de voir dans la configuration ce qui est stubbed / mocked ou juste du code en cours d'exécution. Je crois que Rhino a plusieurs façons de travailler. Vous pouvez notamment utiliser un bloc using () pour isoler la configuration des autres appels.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top