ASP.NET MVC 3、MVCContrib、NUnit、Rhino モックを使用しています。これを投稿しましたが、回答が得られませんでした。人々は、このテストに合格するためのまともな答えを得るのに役立つ私のコーディングにもっと集中しています。
編集ビューをテストしようとしています。ビューのテストをコーディングする方法がわかりません。これは、NewsEditViewData 型の厳密に型指定されたビューです。
ビューが読み込まれると、ニュース サービスから ID によってニュース項目のデータが取得されます。したがって、私のテストでは、ニュース サービスのスタブを作成しました。
var id = 1;
var news = new News();
newsServiceStub
.Stub(x => x.FindById(id))
.Return(news);
次に、このニュース項目を NewsEditViewData にマップする必要があります。これを行うマッパー(AutoMapper)があり、テストでは次のことを行いました。
newsMapperStub
.Stub(x => x.Map(news, typeof(News), typeof(NewsEditViewData)))
.Return(newsEditViewData);
これまでのところ正しい軌道に乗っているかどうかわかりませんか?
次に、次のコードがあります。
// Act
var actual = sut.Edit(id);
私のコードから作業しないでください。ベスト プラクティスに従って回答が必要です。では、アサート部分で何を確認する必要があるのでしょうか? レコードが返されたことも確認する必要がありますか? 私は次のような行で考えていました:
actual
.AssertViewRendered()
.WithViewData<NewsEditViewData>()
.ShouldBe(newsEditViewData);
これは失敗します。誰かがこのテストを書き直して合格するのを手伝ってくれませんか。チェックする必要があるものはすべてチェックしてもらいたい。
完全なテストは次のとおりです。
[Test]
public void Edit_should_render_Edit_view()
{
// Arrange
var id = 1;
var news = new News();
var newsEditViewData = new NewsEditViewData();
newsServiceStub
.Stub(x => x.FindById(id))
.Return(news);
newsMapperStub
.Stub(x => x.Map(news, typeof(News), typeof(NewsEditViewData)))
.Return(newsEditViewData);
// Act
var actual = sut.Edit(id);
// Assert
actual
.AssertViewRendered()
.WithViewData<NewsEditViewData>()
.ShouldBe(newsEditViewData);
}
2011 年 2 月 14 日更新:
私の NewsController には、次のものがあります。
private INewsService newsService;
private IMapper newsMapper;
public NewsController(INewsService newsService)
{
Check.Argument.IsNotNull(newsService, "newsService");
this.newsService = newsService;
newsMapper = new NewsMapper(); // TODO: Use dependency injection
}
アクション メソッドは次のようになります。
public ActionResult Edit(int id)
{
Check.Argument.IsNotZeroOrNegative(id, "id");
var news = newsService.FindById(id);
var newsEditViewData = (NewsEditViewData)newsMapper.Map(news, typeof(News), typeof(NewsEditViewData));
return View(newsEditViewData);
}
NUnit で発生しているエラーは次のとおりです。
MyProject.Web.UnitTests.Controllers.NewsControllerTests.Edit_RenderView_EditView: MvcContrib.TestHelper.AssertionException : MyProject.Web.Common.ViewData.NewsEditViewData でしたが、MyProject.Web.Common.ViewData.NewsEditViewData が必要でした