DataContext падает при модульном тестировании - PullRequest
1 голос
/ 18 июля 2009

Я использую Linq to SQL в моем проекте. У меня есть часть кода, которая вызывает

DataContext db = new DataContext()

Это работает, как и ожидалось, при запуске веб-сайта, однако при вызове этого из моего модульного теста я получаю объект ошибки, не установленный в экземпляр ...

Вы знаете, почему это так?

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

Я просто не понимаю, почему это не работает.

Edit:

В моем контроллере у меня есть строка

                CandidateRegistrationViewModel viewModel = new CandidateRegistrationViewModel("PersonalDetails", candidate);

Модель имеет член db:

 public class CandidateRegistrationViewModel
{
    private EmployDirectDataContext db = new EmployDirectDataContext();

Этот класс затем использует db для заполнения полей выбора.

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

[TestMethod]
    public void PersonalDetailsStepPostShouldRedisplayIfDOBSuppliedInWrongFormat()
    {
        // Arange
        var controller = CreateCandidateController("Dean");
        repository.Add(FakeCandidateData.CreateCandidate(controller.member.UserId()));

        FormCollection formCollection = FakeCandidateData.CreatePersonalDetailsStepFormCollection();
        formCollection["DOB"] = "24/2009/87"; //DOB in wrong format - should be dd/mm/yyyy

        controller.ValueProvider = formCollection.ToValueProvider();

        // Act
        ViewResult result = (ViewResult)controller.PersonalDetailsStep(formCollection);

        // Assert
        Assert.AreEqual("", result.ViewName); //ViewName is returned as empty if same as Action name
    }

Оба проекта имеют одинаковую строку подключения в app / web.config

<add name="EmployDirectDBConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\EmployedDirectDB.MDF;Integrated Security=True;User Instance=True"
        providerName="System.Data.SqlClient" />

Ответы [ 3 ]

0 голосов
/ 18 июля 2009

Возможно, в вашей модульной тестовой сборке неверная строка подключения скомпилирована в настройках. Вот почему я всегда использую:

var db = new MyDataContext(SomeConfigClassIMade.ConnString) {...}

чтобы я мог более тщательно контролировать работу строки соединения.

0 голосов
/ 18 июля 2009

Я не уверен, почему вы хотите проверить сам DataContext ... (Я могу ошибаться, и я уверен, что кто-то скажет мне, если я), но вы бы просто протестировали класс DataAccess или Repository, который использует DataContext ...

Кроме этого, возможно, он не имеет правильной строки подключения ...

0 голосов
/ 18 июля 2009

Тестирование контекста данных больше относится к компетенции интеграционного теста. Макеты больше подходят для вашего интерфейса репозитория. Ваш репозиторий будет содержать действительную ссылку на объект DataContext во время тестирования интеграции.

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