Я использую ASP.NET MVC 3, MVCContrib, NUnit и Rhino Mocks.Я отправил это, но не мог получить ответ.Люди больше внимания уделяют моему кодированию, которое помогает мне получить достойный ответ для прохождения этого теста.
Я пытаюсь проверить мой вид редактирования.Я не уверен, как закодировать тест для представления.Это строго типизированное представление типа NewsEditViewData.
Когда загружается представление, оно получает данные элемента новостей по идентификатору из службы новостей.Итак, в своем тесте я создал заглушку службы новостей:
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-02-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, но ожидаемый 10ata.Dite