Лучшая стратегия для модульного тестирования контроллера спереди назад в ASP.NET с использованием DI - PullRequest
2 голосов
/ 13 декабря 2011

Я новичок в DI и у меня есть вопрос о лучшей стратегии для модульного тестирования контроллера.

У меня есть контроллер, который использует DI для получения репозитория, mappingengine и logger. Именно так я узнал это из примера приложения Kozmics.

private readonly IRepository repository;
private readonly IMappingEngine mappingEngine;
private readonly ILogger logger;

public DossierController(IRepository repository, IMappingEngine mappingEngine, ILogger logger)
{
  this.repository = repository;
  this.mappingEngine = mappingEngine;
  this.logger = logger;
}

Теперь у меня есть метод, который вызывается для сохранения досье. Внутри метода модель досье отображается на досье и сохраняется в базе данных.

[HttpPost]
[ActionName("Dossier")]
[AcceptVerbs(HttpVerbs.Post)]
[AcceptParameter(Name = "button", Value = "save")]
public ActionResult Dossier_Save(string button, DossierModel dossierModel, string returnUrl)
{
  if (!Request.IsAuthenticated)
    return RedirectToAction("Index", "Home");

  if (!ModelState.IsValid) return View(dossierModel);

  Dossier dossier = mappingEngine.Map<DossierModel, Dossier>(dossierModel);
  dossier.DigitaleHandtekeningDatum = new DateTime(2011, 11, 11);

  repository.TransactionBegin();
  repository.Save(dossier);
  repository.TransactionCommit();

  return View();
}

Я хочу проверить контроллер, чтобы убедиться в двух вещах: 1, что досье правильно сопоставлено, и 2, что досье фактически полностью сохранено в базе данных.

Теперь мой вопрос: какова лучшая стратегия для этого? Должен ли я:

  • Модульный тест контроллера в целом? И если да, то как?
  • Издеваться над настойчивостью? Тогда как мне проверить, сохранился ли объект на самом деле?

Должно ли это быть выполнено в отдельном модульном тесте специально для проверки устойчивости базы данных?

Ответы [ 2 ]

0 голосов
/ 08 августа 2012

Я бы не стал это тестировать.Посмотрите на визуализацию затрат и преимуществ модульного тестирования в этом блоге: http://blog.stevensanderson.com/2009/11/04/selective-unit-testing-costs-and-benefits/. Я бы сказал, что контроллеры, как правило, имеют высокий уровень зависимостей и низкий уровень сложности, как координатор на графике.Сохраните свое модульное тестирование в коде, который на самом деле извлекает из него выгоду, например алгоритмы, конечные автоматы и т. Д. Вы можете интегрировать тестирование логики контроллера с помощью автоматизации браузера или использовать что-то вроде http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/, если хотите войтина уровне контроллера.

0 голосов
/ 14 декабря 2011

Сначала я думаю, что вы, вероятно, захотите использовать атрибут [Authorize] вместо тестирования Request.IsAuthenticated. Это устранит сложность насмешек над всем объектом Request.

Затем я бы смоделировал репозиторий и проверил, что метод Save вызывается с правильными параметрами (или не вызывается, в зависимости от тестируемого сценария использования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...