2010-05-05 6 views
0

J'ai une classe qui a deux méthodes. Une méthode doit appeler l'autre méthode et dans mon test, je veux affirmer qu'elle a été appelée.Comment affirmer si une méthode a été appelée dans une autre méthode dans RhinoMocks?

public class Tasks : ITasks 
{ 
    public void MethodOne() 
    { 
    MethodTwo(1); 
    } 

    public int MethodTwo(int i) 
    { 
    return i + 1; 
    } 
} 

Je veux moquer tâches et faire quelque chose comme tasks.AssertWasCalled(x => x.MethodTwo(1)). Doit MethodTwo être virtuel?

Répondre

0

Bien sûr, ma pensée à cette époque était imparfaite. Je devrais être moqueur ITasks, pas la mise en œuvre (Tâches):

ITasks tasks = MockRepository.GenerateMock<ITasks>(); 
tasks.AssertWasCalled(x => x.MethodTwo(Arg<int>.Is.Equal(1))); 
1

Le concept que vous cherchez est partial mocks (cela montre la syntaxe ancienne, mais je ne me souviens pas du nouveau sur le dessus de ma tête). Vous devriez lire à ce sujet. Essentiellement, vous créez le simulacre sur les tâches (pas ITasks) et dites-lui de simuler seulement MethodTwo (qui doit être virtuel).

Cependant ... vous pourriez vouloir reconsidérer votre conception. Qu'est-ce que ITasks? Quel est le rôle? Sont-ils différents des tâches réelles? Y a-t-il une raison pour laquelle vous voudriez les avoir dans la même classe? Je crois comprendre que les simulacres partiels ne sont inclus que lorsque vous devez tester des composants hérités - je n'en ai jamais trouvé l'usage.

+0

C'est juste un exemple de classe dans le but de simplifier la question. :) Dans le code réel, j'ai une classe de tâches (services d'application) qui vient de SharpArchitecture. Quoi qu'il en soit, je commence déjà à voir une mauvaise conception - cette méthode ne devrait pas être virtuelle si je ne vais pas hériter de cette classe, suivant l'exemple MethodTwo() est utilisé seulement par MethodOne() qui est un reste de mon précédent pensant, je suppose (je pensais qu'il serait utilisé par une autre classe), donc il devrait probablement être privé maintenant et les méthodes privées ne sont pas moquées/testées ... Merci pour le lien vers des simulacres partiels. :) –

Questions connexes