Question

J'ai une propriété dans une interface que j'ai raillé en utilisant Rhino Mocks. Je veux savoir si elle était accessible dans mon test unitaire.

Yat-il un moyen de voir si la propriété a été accessible via Rhino Mocks?

J'ai trouvé ce code ici mais il ne semble pas fonctionner:

string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});

Je reproduis ce code et je reçois le texte suivant:

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..

Je voudrais utiliser cette syntaxe, mais je dois manquer quelque chose. Je l'appelle avec un talon (pas une maquette) que cela fait une différence?

Était-ce utile?

La solution 2

Active la syntaxe que j'utilisais fonctionne. Mais il ne fonctionne que si la propriété est pas en mode propertybehavior. (Quelle est la valeur par défaut pour les talons et peuvent être activés pour se moque).

Une fois que le mode est activé propertybehavior, alors que la syntaxe ne fonctionne pas. Selon Ayende vous devez vérifier la valeur à ce moment-là.

Autres conseils

  

Yat-il un moyen de voir si la propriété   a été consulté par Rhino Mocks?

Oui. Vous pouvez configurer une attente pour la propriété. Si la vérification ne jette pas, alors vous savez que la propriété a été consultée:

var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe"); 
mocks.ReplayAll()

// test something that uses IFoo here ...

mocks.VerifyAll();  // Throws if foo.Name was not accessed after ReplayAll()

Ceci est tout en supposant que vous voulez foo.Name à accéder. Si votre objectif est de vérifier qu'il est pas accès, alors vous devriez simplement utiliser StrictMock au lieu de DynamicMock. Une maquette stricte lancera pour les appels inattendus.

Si vous voulez affirmer qu'une méthode a été appelée ou une propriété accessible sur un objet truqué, vous devez toujours utiliser une maquette. Stubs sont pour les situations où vous ne souhaitez pas tester l'interaction, mais veulent juste faire en sorte qu'un appel à un objet retourne une certaine valeur pour rendre le flux logique.

Je crois StrictMock est ce que vous êtes à la recherche. Il y a quelques informations à ce sujet . Son utilisation est dit être découragé, car il peut faire des tests trop fragile, mais il devrait vous aider à réaliser ce que vous essayez de faire.

Vous pouvez vérifier la pile d'appels en utilisant la classe StackFrame. Pas très propre, mais il devrait donner le résultat souhaité ...

J'utilise habituellement Moq qui utilise le château afin que vous pourriez considérer au lieu / avec de Rhino Mocks. Voici comment vous pouvez le faire là-bas:

// expects an invocation to set the value to "foo"
mock.SetupSet(foo => foo.Name = "foo");

// or verify the setter directly
mock.VerifySet(foo => foo.Name = "foo");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top