ASP.NET MVC модульные тесты с NUnit - PullRequest
7 голосов
/ 25 апреля 2009

Я пытался научиться ASP.NET MVC , используя видео, размещенные на сайте ASP.NET , и столкнулся с проблемой при проведении юнит-тестирования.

У меня очень простой контроллер, который использует LINQ to SQL для получения массива объектов:

    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
        using (TrainingLogDataContext dc = new TrainingLogDataContext())
        {
            ViewData.Model = dc.Workouts.ToArray();
        }

        return View();
    }

Ошибка NUnit со следующей ошибкой:

at TrainingLog.Models.TrainingLogDataContext..ctor() in C:\Webs\TrainingLog\TrainingLog\Models\TrainingLog.designer.cs:line 41
at TrainingLog.Controllers.HomeController.Index() in C:\Webs\TrainingLog\TrainingLog\Controllers\HomeController.cs:line 16
at TrainingLogTests.Controllers.HomeControllerTest.Index() in C:\Webs\TrainingLog\TrainingLog.Tests\Controllers\HomeControllerTest.cs:line 23

Полагаю, проблема в том, что NUnit не может получить строку подключения для DataContext из web.config. Какой лучший способ обойти это?

Работает нормально, когда я запускаю страницу, но в NUnit модульное тестирование не проходит.

Ответы [ 5 ]

5 голосов
/ 27 апреля 2009

Скопируйте строки подключения в web.config проекте в app.config в вашем тестовом проекте nunit.

3 голосов
/ 25 апреля 2009

Я выбрал макет контекста данных. Я использую фабрику, чтобы создать контекст данных и вставить его в контроллер. Если фабрика имеет значение null (что происходит при вызове конструктора без параметров), она создает экземпляр фабрики по умолчанию, который подключается к базе данных. В моих модульных тестах я использую фабрику, которая создает фальшивый контекст данных, который работает в памяти. Мой фиктивный контекст данных был основан на коде из этого блога , хотя я расширил его для обработки объектов, добавленных в базу данных с помощью наборов сущностей.

Если вы не хотите идти фиктивным маршрутом (и я бы порекомендовал его, хотя это потребует некоторой предварительной работы). Вы можете добавить файл app.config в свой проект модульного тестирования и поместить в него строки подключения для своего контекста данных.

1 голос
/ 30 апреля 2009

Лучше не получать доступ к базе данных из ваших модульных тестов, так как это приведет к тому, что тесты будут выполняться так медленно, что вы перестанете беспокоиться о запуске тестов. Но если вы хотите сделать это, вы можете создать файл app.config в вашем проекте NUnit и поместить туда строку подключения. Иногда NUnit не распознает этот файл app.config, но более подробную информацию о том, как его настроить, можно найти в ответах на « Как инициализировать коллекцию ConnectionStrings в NUnit ».

1 голос
/ 25 апреля 2009

Этот шаблон и инструкции помогли мне начать работу: http://johnnycoder.com/blog/2009/04/01/aspnet-mvc-test-template-project-for-nunit-and-moq/

0 голосов
/ 26 апреля 2009

Проще всего установить NUnit перед установкой ASP.NET MVC, а затем настроить тестовый проект при создании проекта ASP.NET MVC. Затем вы можете создать элементы конфигурации, необходимые для того, что вы пытаетесь сделать.

ПРИМЕЧАНИЕ. Лучший способ работы с данными - это имитировать их, что означает, что вам нужно вывести LINQ из контроллера, поскольку вы не можете легко инвертировать управление на контроллере.

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