OK, je sais qu'il y a eu beaucoup de confusion sur la nouvelle syntaxe AAA dans Rhino Mocks, mais je dois être honnête, de ce que j'ai vu jusqu'à présent, j'aime. Elle se lit mieux, et permet d'économiser quelques frappes.
En fait, je teste un ListController
qui va essentiellement être en charge de certaines listes de choses :) J'ai créé une interface qui deviendra éventuellement le DAL, et c'est bien sûr stubbé pour le moment.
J'avais le code suivant :
( manager
est le système à tester, data
est l'interface de données stubbed)
[Fact]
public void list_count_queries_data()
{
data.Expect(x => x.ListCount(1));
manager.ListCount();
data.VerifyAllExpectations();
}
L'objectif principal de ce test est de s'assurer que le gestionnaire interroge effectivement le DAL. Notez que le DAL n'est pas réellement là, donc il n'y a pas de valeur "réelle" qui revient
Cependant, cela échoue car je dois modifier l'attente pour avoir une valeur de retour, comme :
data.Expect(x => x.ListCount(1)).Return(1);
Cela fonctionnera alors sans problème et le test sera réussi, cependant - ce qui me perturbe, c'est qu'à ce moment-là, la valeur de retour signifie rien . Je peux le changer en 100, 50, 42, n'importe quoi et le test passera toujours ?
Cela me rend nerveux, car un test doit être explicite et doit échouer totalement si les conditions attendues ne sont pas remplies, n'est-ce pas ?
Si je change le test en (le "1" est l'ID attendu auquel le compte est lié) :
[Fact]
public void list_count_queries_data()
{
manager.ListCount();
data.AssertWasCalled(x => x.ListCount(1));
}
Tout passe bien, et si j'allume le test, c'est la tête pour AssertWasNotCalled
il échoue comme prévu Je pense aussi qu'il se lit beaucoup mieux, qu'il est plus clair sur ce qui est testé et surtout qu'il réussit et échoue comme prévu !
Donc, Est-ce que je rate quelque chose dans le premier exemple de code ? Que pensez-vous de la création d'assertions sur les stubs (une discussion intéressante a eu lieu à ce sujet) ? aquí J'ai personnellement aimé cette réponse .
1 votes
Merci de m'avoir prévenu. C'est une très vieille question qui s'est perdue dans la poussière.