2010-02-01 5 views
6

J'ai une méthode privée qui devrait revenir à l'aide true.I m Nunit et MOQ j'ai donc comme suit:Comment puis-je affirmer/vérifier une méthode protégée par Moq?

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    // How do I assert it now since I cannot do 
    customerMock.Verify //Verify does not exists. 
} 

Impossible trouver quelque chose sur Google qui vous indique comment tester. comme vous pouvez le voir, je peux faire une mise en place pour cela, mais je ne peux pas affirmer.

Ai-je manqué l'évidence? Merci beaucoup.

Répondre

3

Vous ne voulez pas tester une méthode sur une maquette. Vous voulez tester la méthode sur une instance de la classe réelle. Le chemin à test a private method sur une classe est d'utiliser un accesseur. Notez que VS vous les fournira automatiquement, ou vous pouvez "rouler les vôtres" en utilisant la réflexion. Pour une méthode interne, vous pouvez également définir InternalsVisibleTo sur votre projet de test dans le fichier AssemblyInfo.cs.

[TextFixture] 
public class CustomerTestFixture 
{ 
    var customer = new Customer(); 
    var accessor = new Customer_Accessor(new PrivateObject(customer)); 

    Assert.IsTrue(accessor.CanTestPrivateMethod()); 

} 

Lorsque vous moquez un objet, l'intention est que cet objet est utilisé comme une dépendance de la classe réelle en cours de test. Par conséquent, il suffit de pouvoir configurer l'objet fantaisie pour renvoyer des valeurs spécifiques. Vous faites vos assertions sur la classe qui utilise la dépendance, pas sur la classe fictive. L'étape de vérification garantit que votre classe sous test appelle les méthodes sur les objets simulés en fonction des attentes que vous avez établies.

+0

Merci pour votre réponse. Je veux que ma maquette objet.CanTestPrivateMethod retourne des valeurs spécifiques. Donc, si je hardcode "return true" dans ma méthode privée. Puis-je encore affirmer cela? À mon avis, je ne devrais pas tester une méthode privée, mais mon collègue insiste sur celui-ci. Donc j'essaie juste de comprendre comment le faire en utilisant MOQ. – user9969

+1

Vous manquez mon point. Ne vous moquez pas de l'objet testé. Seulement se moquer de ses dépendances. Créez une instance réelle, définissez les conditions pour que la méthode privée renvoie une valeur spécifique, puis utilisez l'accesseur pour vérifier que la méthode renvoie effectivement cette valeur. Le seul besoin de mocks serait si l'instance avait des dépendances que vous utiliseriez dans votre méthode privée. – tvanfosson

+0

Merci pour votre temps et réponse. J'ai compris le point maintenant. – user9969

Questions connexes