2009-06-01 6 views
5

J'ai essayé de trouver des informations simples à ce sujet, mais je n'ai pas pu - soit ce que j'ai trouvé a été vague pour que je comprenne ce qui se passe, ou trop spécifique pour la mauvaise chose, par exemple un tutoriel que j'ai trouvé pour tester un AuthorizeAttribute. (Une troisième alternative est bien sûr que je suis trop bête pour réaliser que je lis l'information que je cherche ... auquel cas j'ai encore besoin d'aide, parce que je suis bête: P)Comment est-ce que UnitTest un ActionFilter personnalisé?

Je voudrais pouvoir tester deux choses:

  1. Qu'une ActionFilter donnée est appliquée à une action (pour vous assurer que l'action est conforme aux exigences)
  2. Qu'un ActionFilter donné fait ce qu'il est censé faire .

Et je suis clueless. Quelqu'un pourrait-il me pousser dans la bonne direction quant à ce que j'ai réellement besoin de tester? Que devraient contenir mes sections Réorganiser, Agir et Affirmer?


Un petit détail, si je ne suis pas assez clair:

J'ai un CustomValidationFilter qui est censé vérifier si deux valeurs de forme présentées sont les mêmes, et ajouter un ModelStateError sinon. Je veux vérifier que l'erreur est ajoutée avec le message d'erreur correct si les valeurs ne sont pas identiques et que l'erreur est pas ajoutée si les valeurs sont égal (et non null). J'ai également une action Write sur un GuestbookController. Je veux vérifier que le filtre est appliqué à cette action.

+0

Pourriez-vous éventuellement poster votre code de travail pour cela? Je suis allé jusqu'à créer l'attribut, mais j'ai des problèmes qui passent dans un ResultExecutingContext. –

+0

Salut Mark! Mon code est disponible à http://snipplr.com/users/RockinForGod/ –

Répondre

4

utilisant la réflexion dans votre test. Créez un test unitaire pour la méthode dans votre classe. Simulez le filterContext avec les données appropriées et vérifiez que les variables que la méthode est censée définir sont en fait ce que vous attendez d'elles.

public void AttributeTest() 
{ 
    var httpContext = MockRepository.GenerateMock<HttpContextBase>(); 
    var controller = new FakeController(); 
    controller.controllerContext = new ControllerContext(httpContext, new RouteData(), controller); 
    ... 

    attribute.OnActionExecuting(filterContext); 

    Assert... 

} 
+0

Un grand merci! Il m'a fallu du temps pour comprendre comment maquiller tout ce dont j'avais besoin pour l'AttributeTest, mais je pense que je l'ai eu maintenant. Si quelqu'un trouve cela et est intéressé, je posterai le code dans une édition - juste un commentaire ici et je mettrai à jour la question avec mon code de test. –

+0

@Tomas Je serais intéressé par un post avec ce que vous avez fait exactement comme je construisais une question à poser. Cela dit, pouvez-vous utiliser MvcContrib.TestHelper pour vous aider à vous moquer des données requises? – ahsteele

+0

@ahsteele: Ça fait un moment que je travaillais là-dessus, mais il semble que j'ai ajouté un exemple de travail à http://snipplr.com/users/RockinForGod/ Si cela ne vous suffit pas, vous pouvez toujours demander nouvelle question détaillant ce que vous avez besoin de plus. –

Questions connexes