Asp.net mvc 使用视图模型测试get操作

Asp.net mvc 使用视图模型测试get操作,asp.net-mvc,nunit,mvccontrib,mvccontrib-testhelper,Asp.net Mvc,Nunit,Mvccontrib,Mvccontrib Testhelper,我有以下控制器操作: public ActionResult Edit(int id) { var news = newsRepository.GetNewsByID(id); Mapper.CreateMap<News, NewsEditModel>(); var newsEditModel = (NewsEditModel)Mapper.Map(news, typeof(News), typeof(NewsEditModel)); retu

我有以下控制器操作:

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);
}
public ActionResult编辑(int-id)
{
var news=newsRepository.GetNewsByID(id);
CreateMap();
var-newsEditModel=
Map(news,typeof(news),typeof(NewsEditModel));
返回视图(newsEditModel);
}
以及相应的测试:

[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);
}
[测试]
公共无效编辑\u应\u呈现\u视图()
{
//安排
var-id=1;
var newsEditModel=新的newsEditModel();
//表演
var实际值=sut.Edit(id);
//断言
实际的
.AssertViewRendered()
.WithViewData()
.ShouldBe(newsEditModel);
}
在NUnit GUI中,我遇到以下错误:

MyProject.Web.UnitTests.Controllers.NewsControllerTests.Edit\u应\u呈现\u视图: MvcContrib.TestHelper.AssertionException:为MyProject.Web.Common.ViewData.NewsEditModel,但应为MyProject.Web.Common.ViewData.NewsEditModel


我不知道如何编写相应的单元测试。有人能帮我吗?

您的测试正在比较
NewsEditModel
的两个不同实例—一个是在测试代码中创建的实例,另一个是在操作方法中创建的实例

如果要在测试中检查模型特性值,可以执行以下操作:

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);
var模型=实际
.AssertViewRendered()
.WithViewData();
//检查模型是否不为空
Assert.That(model,Is.Not.Null);
//检查模型ID是否与传递到操作方法的ID相同
断言(model.Id,Is.EqualTo(1));
//或者。。。
模型Id应为(1);

是的,有人已经告诉我了,但我如何更改它以使测试成功通过?我需要用从数据库中获取的News对象填充NewsEditModel属性。希望我的示例有助于阐明如何检查属性值。如果您正在从数据库中获取值,则应该考虑是否可以模拟数据库检索代码,以便只对控制器动作进行单元测试,而不是数据库层。@ RikTo:我不想验证模型属性。我想说的是,在我的控制器中,我将有一个NewsEditModel。此模型属性将从我从数据库调用中获得的新闻对象填充/映射。然后我将有返回视图(newsEditModel);。如果您没有验证模型属性,那么可以省略我的示例中的最后一行。然后,您的单元测试将只是验证是否呈现了一个视图,以及该视图的视图数据是否为正确的类型(NewsEditModel)。好的。我刚刚更新了我的编辑。请对我正在努力完成的事情感到高兴。你的答案还是一样吗?我什么时候用ShouldBe?