Test d'une action get avec le modèle de vue
-
12-10-2019 - |
Question
Je l'action du contrôleur suivant:
public ActionResult Edit(int id)
{
var news = newsRepository.GetNewsByID(id);
Mapper.CreateMap<News, NewsEditModel>();
var newsEditModel =
(NewsEditModel)Mapper.Map(news, typeof(News), typeof(NewsEditModel));
return View(newsEditModel);
}
Et le test correspondant:
[Test]
public void Edit_should_render_view()
{
// Arrange
var id = 1;
var newsEditModel = new NewsEditModel();
// Act
var actual = sut.Edit(id);
// Assert
actual
.AssertViewRendered()
.WithViewData<NewsEditModel>()
.ShouldBe(newsEditModel);
}
Dans l'interface graphique NUnit je reçois l'erreur suivante:
MyProject.Web.UnitTests.Controllers.NewsControllerTests.Edit_should_render_view: MvcContrib.TestHelper.AssertionException: était MyProject.Web.Common.ViewData.NewsEditModel mais attendu MyProject.Web.Common.ViewData.NewsEditModel
Je ne sais pas comment écrire le test unitaire correspondant. Quelqu'un peut-il me aider?
La solution
Votre test compare deux instances différentes de NewsEditModel
- une instance que vous créez dans votre code de test, et l'autre qui est créé dans la méthode d'action.
Si vous voulez examiner les valeurs de propriétés de modèle dans le cadre de votre test, vous pouvez faire ceci:
var model = actual
.AssertViewRendered()
.WithViewData<NewsEditModel>();
// Check that model is not null
Assert.That(model, Is.Not.Null);
// Check that model ID is same as passed into action method
Assert.That(model.Id, Is.EqualTo(1));
// or alternatively ...
model.Id.ShouldBe(1);