2010-05-19 6 views
0

Je voudrais tester la validation de DTO soumis. Ceci est l'os à nu d'un contrôleur créer l'action:tester le contrôleur dans asp.net mvc

[AcceptVerbs(HttpVerbs.Post)] 
     public RedirectToRouteResult Create(SomeDTO SomeDTO) 
     { 
      SomeObject SomeObject = null; 

      try 
      { 
SomeObject = this.RepositoryService.getSomeObjectRepository().Create(SomeDTO, this.RepositoryService); 
      } 
      catch (BrokenRulesException ex) 
      { 
       ex.AddModelStateErrors(ModelState, "Model"); 
      } 
      catch (Exception e) 
      { 
       ModelState.AddModelError("Exception", e.Message); 
      } 

      TempData["ViewData"] = ViewData; 
      TempData["SomeDTO "] = SomeDTO; 

      return ModelState.IsValid ? RedirectToAction("SomeObjectDetail", new { Id = SomeObject.Id }) : RedirectToAction("Form"); 
     } 

La mécanique, mais pas pertinente, est la suivante: J'ai vue fortement typé = forme qui présente un DTO à cette action qui renvoie soit la forme ou la page de détails de l'objet créé.

Je voudrais tester à l'unité si le Modèle contient certaines combinaisons clé/erreur, compte tenu d'un dto invalide. Est-ce que quelqu'un a fait des choses similaires? Tous les pointeurs seraient très appréciés.

Merci.

Meilleurs voeux,

Christian

Répondre

1

Dans votre cas, je ne pense pas que vous voulez vraiment tester l'état du modèle. Au lieu de cela, vous devez simplement utiliser le test mis en place pour induire un état de modèle correct/incorrect, puis tester que le résultat approprié est renvoyé dans les conditions. Vous pouvez utiliser des tests séparés pour valider les diverses conditions sous lesquelles le modèle est valide/invalide, cependant, si vous utilisez DataAnnotations, je ne vois pas grand-chose dans le fait de tester le bon fonctionnement de l'infrastructure de liaison de modèle. Vraisemblablement, Microsoft a déjà fait cela.

originale, basée sur la (défectueuse) hypothèse qu'un ViewResult était retourné

Je pense que ce devrait être quelque chose comme ça.

[TestMethod] 
public void TestCreate() 
{ 
    // set up 

    var result = Create(invalidDTO) as ViewResult; 

    var modelState = result.ViewData.ModelState; 

    Assert.IsFalse(modelState.IsValid); 

    var errors = modelState.Errors; 

    Assert.AreEqual(1, errors.Count); 
    Assert.AreEqual(errors[0].ErrorMessage, "some error message"); 
} 
+0

Cela semble très bien merci. Je vais essayer demain. Merci. – cs0815

+0

@csetzkom - il pourrait y avoir quelques problèmes de syntaxe (je suis sur mon Mac), mais c'est l'idée de base. – tvanfosson

+0

ouais merci, mais je reçois l'idée - je pense - va bientôt savoir et ensuite accepter votre réponse – cs0815

Questions connexes