Имитация контекста данных для объекта, который имеет зависимость

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

Я использую Ninject для внедрения зависимости и Moq для создания фиктивного контекста данных. Мой DI использует интерфейс IDataContext, который реализует мой dbml и используется в процессе внедрения.

В моем модульном тесте я создаю свой фиктивный контекст данных следующим образом:

var mock = new Mock<IDataContext>();
var myController = new MyController(mock.Object);

Это вызывает исключение Object reference not set to an instance of an object. во второй строке при выполнении конструктора контекстов данных.

Мне явно не хватает фундаментальной части при настройке, однако большинство примеров Moq, которые я видел, включают в себя какой-то тест против имитируемого объекта с использованием Setup().

Правильно ли я поступаю? Должен ли я создавать макет моего интерфейса IDataContext или что-то еще?


person Jamie Dixon    schedule 03.06.2010    source источник
comment
Можете ли вы показать стек вызовов для исключения?   -  person Craig Stuntz    schedule 03.06.2010
comment
Кроме того, что происходит в конструкторе MyController? Если бы мне пришлось рискнуть предположить на данный момент, вам не хватает настройки фиктивного объекта, который должен возвращать что-то, используемое в конструкторе.   -  person cloggins    schedule 03.06.2010
comment
Спасибо за комментарии, ребята. Я как раз собирался ответить, прежде чем Мелаос опубликовал ответ, который я искал. Еще раз спасибо, что нашли время, чтобы оставить комментарий.   -  person Jamie Dixon    schedule 04.06.2010


Ответы (1)


ха-ха, ответ пришел, когда я читал блог emad о модульном тестировании в ASP.Net MVC.

Я предполагаю, что вы не добавили строку подключения в app.config вашего тестового проекта, верно? :)

И это способ зависимости от базы данных, потому что вы все еще не издеваетесь над концом базы данных. Поэтому, если вы хотите это сделать, вам нужно найти коды в Google, есть несколько способов сделать это.

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

ссылка

person melaos    schedule 04.06.2010
comment
Спасибо, мелаос! Добавление app.config в мой тестовый проект и размещение в нем моего кода строки подключения работает очень хорошо. Отлично! - person Jamie Dixon; 04.06.2010