J'ai beaucoup édité et simplifié cette question.Pourquoi ce test d'unité asp.net mvc échoue-t-il?
Si je cette méthode sur mon HomeController:
public ActionResult Strangeness(int id)
{
StrangenessClass strangeness = null;
if(id == 1)
{
strangeness = new StrangenessClass() { Name="Strangeness", Desc="Really weird behavior" };
}
return View(strangeness);
}
Et cette classe:
public class StrangenessClass
{
public string Name { get; set; }
public string Desc { get; set; }
}
Pourquoi ne satisfait pas à ce test unitaire?
[TestMethod]
public void Strangeness()
{
HomeController controller = new HomeController();
ViewResult result = controller.Strangeness(1) as ViewResult;
var model = result.ViewData.Model;
result = controller.Strangeness(2) as ViewResult;
model = result.ViewData.Model;
Assert.IsNull(model);
}
Je comprends que normalement, je devrais un test pour tester l'état nul et une autre pour tester un bon état, mais je suis tombé sur ce problème lors du test mon contrôleur de suppression. Lors d'un test de suppression, je récupérais normalement l'enregistrement, supprimais l'enregistrement, puis essayais de le récupérer. Il devrait être nul la deuxième fois que je le prends, mais ce n'était pas le cas. Donc, j'ai fait bouillir le problème comme décrit ci-dessus.
Si ce n'est pas le bon moyen de tester les suppressions, comment le feriez-vous? Vous n'avez pas besoin de vous assurer que l'enregistrement a bien été effacé?
Il y a deux méthodes de contrôleur de suppression que j'ai posté. Le premier à récupérer l'état à supprimer, et la deuxième méthode de publication pour effectuer la suppression. La variable _stateService est une instance de mon service d'état qui est basée sur une interface et renvoie tout à un FakeStateRepoditory pour les tests unitaires. Mon TestInitialize définit tout cela afin que j'ai des données constituées pour chaque test. L'arrangement obtient l'enregistrement que je veux supprimer, l'acte essaye de le supprimer et le récupère ensuite, et l'actif s'assure qu'il est nul et que nous avons été renvoyés à la méthode d'index. –
Pour clarifier davantage, j'ai plusieurs tests de suppression pour m'assurer que la première méthode de contrôleur de suppression renvoie les données d'affichage correctes, pour m'assurer que je suis redirigé vers l'endroit approprié si j'essaye de supprimer un enregistrement qui n'existe pas, etc. Ce test particulier fait en sorte que l'enregistrement soit effectivement supprimé. Pour ce faire, je dois le récupérer, l'envoyer pour être supprimé et essayer de le récupérer pour m'assurer qu'il est parti. –
Lorsque j'essaie d'utiliser votre méthode, j'obtiens l'erreur suivante sur le test HomeController_Delete_Action_Handler_Should_Redirect_If_Model_Successfully_Delete: Impossible de trouver un paramètre nommé 'controller' dans la collection Valeurs du résultat. Si je le change en: réelle .AssertActionRedirect() .ToAction ("Index"); cela fonctionne. Mais, je préfère ta méthode. Savez-vous ce que je fais mal? –