2010-12-05 5 views
2

Dans MVC3 3, nous pouvons publier une requête basée sur JSON sur un contrôleur MVC et lier automatiquement le résultat. Je me suis cogné la tête sur la façon de tester correctement cette unité et j'espérais que les experts ici pourraient me mettre sur la bonne voie.Publication de JSON dans ASP.NET MVC 3.0 RC Contrôleur et test d'unité

Exemple d'un simple post jquery avec un résultat JSON se trouve dans le blog de prévisualisation: http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx

Dans mvc 2 je pouvais faire créer un simple test unitaire comme ceci:

 // setup 
     FormCollection formfakey = new FormCollection 
     { 
      {"address1", "123 test street"}, 
      {"email", "[email protected]"} 
     }; 

     _controller.ValueProvider = formfakey; 

     //execute 
     var result = _controller.ThemeContent(formfakey) as RedirectToRouteResult; 

     // assert 
     Assert.AreEqual("index", result.RouteValues["action"]); 
     Assert.AreEqual("success", result.RouteValues["controller"]); 

I J'avais prévu que je pourrais essentiellement dupliquer ce code avec un objet JSON et le définir sur les contrôleurs ValueProvider. Cela ne semble pas être le cas. Toute assistance sera grandement appréciée.

Répondre

2

Normalement, votre action du contrôleur devrait prendre un modèle de vue fortement typé:

[HttpPost] 
public ActionResult UpdateProduct(Product product) 
{ 
    return View(); 
} 

donc vous tester cette action du contrôleur comme toute autre action du contrôleur. Il n'y a rien spécial et lié à JSON sur cette action du contrôleur:

[TestMethod] 
public void SomeTest() 
{ 
    // arrange 
    var controller = new HomeController(); 
    var product = new Product(); 

    // act 
    var actual = controller.UpdateProduct(product); 

    // assert 
    // TODO: 
} 

Comme vous pouvez le voir, nous ne devrions mentionner aucune JSON à ce sujet. C'est juste le JsonValueProviderFactory intégré qui permet d'interpréter la requête JSON de liaison à un type .NET, mais vous n'avez pas besoin de le tester. Il est déjà intégré.

+0

Mais bien sûr. Merci Darin. – Jesse

Questions connexes