2010-07-16 4 views
0

J'ai une méthode qui est légèrement compliquée et qui doit être très bien testée. Substance de sauce secrète. Ok, peut-être pas si cool, mais je ne suis pas sûr à 100% comment faire pour configurer ces choses. Ce genre de provient de ma question précédente here. Je n'ai pas utilisé de rhinocéros alors je suis toujours mauvais/inconscient de la syntaxe, alors n'hésitez pas à faire une tonne de suggestions.Se moquer d'une méthode et retourner des résultats différents

Public Function GenerateAllNotifications(ByVal days As List(Of Integer)) As List(Of MailMessage) Implements INotificationService.GenerateAllNotifications 

    Dim someStuff = _someService.GetThingsThatExpireBetween(day1, day2) 

    'build some messages 

    Return messages 

End Function 

Ma configuration dans mes tests sont à la recherche comme ça ... Je sais que cela est faux si

Dim fakeStuff = New SomeItem() 

Dim fakeContext = New List(Of Provider) 
fakeContext.Add(fakeStuff) 
Dim someService = MockRepository.GenerateStub(Of ISomeService)() 
someService.Stub(Function(x) x.GetThingsThatExpireBetween(30, 60)).IgnoreArguments().Return(fakeContext.AsQueryable) 
_fakeNotificationService = New NotificationService(someService) 

Ce que je veux accomplir est un retour sur les articles execpted de ce service. La règle métier est une collection de messages basée sur cette expiration donnée. Donc, si une entité expire dans 30 jours, le message reflète cela, si c'est 60, 90, peu importe, ceux-ci sont mis dans les messages. Je pense que mon problème est que j'ai besoin d'avoir des objets différents à chaque fois ...?

+0

Pourriez-vous clarifier ce que vous essayez de réaliser? Et peut-être coller au moins un aperçu du code traitant des messages? – Grzenio

+0

Le message est le résultat final, il n'est donc pas aussi important d'obtenir les données pour les construire correctement (c'est une méthode de filtrage). Faire le message est stupide facile mais obtenir les bonnes choses à faire ce n'est pas. J'ai besoin de différents objets pour revenir à chaque GetThings car ils seront filtrés (ce qui est attendu) ... Je commence à me demander si je dois retourner chacun individuellement par l'entrée (30,60 et ainsi de suite) – jeriley

+0

Quand vous stub/mock une méthode que vous spécifiez les arguments pour lesquels vous renvoyez la valeur spécifiée. Tu ne peux pas juste définir quelques stubs? Vous avez vraiment besoin de coller du code simplifié si vous voulez que quelqu'un vous aide. – Grzenio

Répondre

0

Il semble que vous essayez de vous comporter correctement. Si vous considérez plutôt votre maquette comme fournissant le contexte du comportement de votre classe testée, cela pourrait vous aider.

  • Compte tenu de ma fantaisie se comportera d'une certaine façon
  • Quand j'utilise ma classe
  • J'attends ce résultat

Ensuite, vous pouvez faire votre maquette des comportements différents - quels que soient les arguments - et vérifiez que votre classe se comporte de manière appropriée dans ces différentes situations. Vous aurez un nouveau test pour chaque contexte. Je nomme souvent mes tests après le comportement dans les contextes:

  • devrait me donner une liste vide si aucune des choses se trouvent
  • devrait traiter et retourner les choses qui se trouvent
  • devrait fournir un message d'erreur si le service émet une exception

etc., seulement camel-cased et avec une attribution [Test].

Est-ce que cela aide? Sinon, j'ai peut-être mal compris le problème - des excuses.

Questions connexes