Unittesting MVC контроллер - PullRequest
       16

Unittesting MVC контроллер

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

Я пытаюсь изучить MVC в сочетании с IoC и DI.В своем проекте я также использую Castle, Automapper, NHibernate, NHibernateIntegration.

Благодаря превосходному примеру приложения ToZeSeen от Kozmic, я думаю, что решение в значительной степени уже установлено.Но теперь я хочу выполнить базовую операцию сохранения на уровне метода контроллера.Я просто не понимаю, как это сделать.Я ожидаю, что моя проблема довольно проста, но я новичок в этом, и любая помощь приветствуется.

У меня есть такой досье-контроллер:

    [Authorize]
    [Transactional]
    public class DossierController : BaseController
    {
        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")]
        [Transaction]
        [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);

            repository.Save(dossier);

            return View();
        }

Здесь я просто хочу автоматизировать модель досьев досье и сохраните его с помощью репозитория.

Теперь я хочу провести модульное тестирование с помощью Nunit.Я не хочу что-то издеваться, я хочу настоящий тест на стойкость на уровне контроллера.Для этого мне нужно создать новый контроллер досье и передать правильные аргументы.Теперь я потерян.Как мне создать и настроить аргументы, чтобы они работали так же, как в веб-приложении.Например: Как мне создать правильно настроенный Automapper в Unittest?Как мне создать правильно настроенный репозиторий?Должен ли я использовать контейнер?

Любая помощь, особенно пример кода, высоко ценится!

Заранее спасибо.

1 Ответ

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

Если вы не хотите что-то издеваться, вам нужно будет создать конкретные версии сервисов, которые требуются конструктору вашего контроллера.

, например

IRepository repository = GetRepository();
IMappingEngine mappingEngine = GetMappingEngine();
ILogger logger = GetLogger();
DossierController controller = new DossierController(repository, mappingEngine, logger);
ActionResult rsult = controller.Save(...etc...);

Что касается того, как вы должны их конфигурировать и создавать, вам, по сути, нужно будет сделать это точно так же, как это делает ваше приложение MVC.

Если вы не уверены, где в вашем приложении MVC они настраиваются, я бы посоветовал обратить внимание на конфигурацию IoC и отработать обратное слово оттуда.

...