Affirmer qu'une méthode est appelée exactement une fois
Je tiens à affirmer qu'une méthode est appelée exactement une fois. Je suis en utilisant RhinoMocks 3.5.
Voici ce que j'ai pensé de travail:
[Test]
public void just_once()
{
var key = "id_of_something";
var source = MockRepository.GenerateStub<ISomeDataSource>();
source.Expect(x => x.GetSomethingThatTakesALotOfResources(key))
.Return(new Something())
.Repeat.Once();
var client = new Client(soure);
//the first call I expect the client to use the source
client.GetMeMyThing(key);
//the second call the result should be cached
//and source is not used
client.GetMeMyThing(key);
}
Je veux ce test échoue si la deuxième invocation de GetMeMyThing()
appels source.GetSomethingThatTakesALotOfResources()
.
- La seule chose de mal avec le ci-dessus sont l'utilisation de GenerateStub au lieu de GenerateMock et manquant de cette dernière ligne: le client.VerifyAllExpectations();
- ...J'ai édité les accepté de répondre...
Vous devez vous connecter pour publier un commentaire.
Voici comment je voudrais vérifier une méthode est appelée une fois.
.Expect
à un.Stub
- experiementation a montré que laa.VerifyAllExpectatons()
échoue sinon.J'ai été en utilisant le AssertWasCalled extension de contourner ce problème. C'est le meilleur que j'ai pu trouver/venir avec, mais ce serait mieux si je n'avais pas à spécifier à l'appel deux fois.
Excpect
faire? Je ne pense pas queVerifyAllExpectations
fonctionne sur un bout, il ne fonctionne que sur une Maquette. Mais même si cela pourrait fonctionner, quelle est l'utilité? VotreAssertWasCalled
contient toutes les assertions dont il a besoin. Je voudrais changer lesExpect
àStub
et le fossé de laRepeat.Once
, et aussi enlever leVerifyAllExpectations
.Vous pouvez être intéressé par ce bit du Rhino se moque de 3.5 Documentation (cité ci-dessous). Ressemble vous avez besoin pour se moquer de la classe, pas de stub il, pour qu'il fonctionne comme vous le souhaitez.
Voici ce que je viens de faire (comme recommandé par Ray Houston). Je voudrais tout de même apprécier une solution plus élégante...
Vous pouvez passer un délégué à WhenCalled de décompte des appels:
Aussi, vous devez utiliser une maquette pas un bout, et de vérifier les attentes sur la simulation de trop.
Vous pouvez créer stricte se moquer, si vous voulez vous assurer qu'une méthode est appelée qu'une seule fois.
Ayant une fonctionnalité appelée "Exactement" ce serait pratique pour écrire des tests sur le code qui, autrement, pourraient entrer dans une boucle infinie. J'aimerais écrire un essai tel que le deuxième appel à une méthode qui permettrait de lever une exception.
Certaines bibliothèques pour python vous permettent de séquence attentes, de sorte que la première renvoie la valeur false et la seconde soulève une exception.
Rhino ne le ferai pas. Une fantaisie partielle avec .Une fois intercepter le premier appel, et le reste sera transmis à la méthode d'origine. Pour que le suce, mais c'est vrai.
Vous aurez à créer une main-dérision. Dériver une "tests" de la classe, et de lui donner la capacité à augmenter après le premier appel.