Как правильно выполнить модульное тестирование моего DAL?

Я новичок в модульном тестировании. Но как мне выполнить модульное тестирование моего DAL, написанного с помощью Entity Framework, чтобы я мог убедиться, что мой код DAL работает правильно, но база данных фактически не затрагивается? Может ли кто-нибудь дать как можно более подробную информацию, пожалуйста.


person Ray    schedule 21.11.2008    source источник


Ответы (3)


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

person Garry Shutler    schedule 21.11.2008
comment
+1 И если тестовой базы данных не существует, ее действительно следует создать (похоже, ОП беспокоится об обновлениях данных). - person Dana the Sane; 21.11.2008
comment
Какова роль насмешки, может ли кто-нибудь объяснить ее использование по сравнению с ролью тестовой базы данных? - person Ray; 21.11.2008
comment
Тестовая база данных будет тем, против чего вы будете запускать свои интеграционные тесты (тесты вашего DAL). Насмешка будет использоваться для замены вашего DAL для модульных тестов, чтобы вы просто тестировали логику без фактического попадания в базу данных (например, вы убедитесь, что ваш код правильно вызывает ваш DAL, предоставляя макет). - person Todd; 22.11.2008

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

person Ricardo Villamil    schedule 21.11.2008
comment
интересно, никогда не думал об этом, я уверен, что могу это найти в Google, но у вас есть фрагмент кода, как вы это делаете? - person Ray; 21.11.2008
comment
Это не юнит-тест, а интеграционный тест, и это нормально. Тесты интеграции многих фреймворков указывают на отдельную тестовую базу данных с автоматическими транзакциями для каждого отдельного теста. - person Hates_; 22.11.2008
comment
Выполняет ли NUnit этот автоматический тест? Если да, то как мне настроить его для этого? - person Ray; 22.11.2008
comment
Интересный подход, но я не уверен, что буду его использовать, потому что вы не завершаете операцию. Почему бы не использовать метод разборки, который очищает после теста? - person roundcrisis; 16.03.2010

Модульное тестирование DAL — очень распространенная головная боль при разработке. По большей части, я предлагаю вам пропустить это.

Большинство ORM в наши дни предлагают какой-либо язык запросов, будь то LINQ, HQL или какой-либо другой вариант. Поскольку правильный модульный тест требует, чтобы вы на самом деле не попадали в базу данных, вы должны имитировать ORM, и это самая большая боль в заднице, о которой вы только можете подумать. Не стоит, имхо. В конечном счете, вы только в конечном итоге проверяете, написали ли вы правильный запрос в своем коде; вы вообще не получаете значения регрессии и можете лучше служить своим целям, просматривая код.

Однако я не говорю, что вам не следует тестировать использование DAL; просто не пробуйте модульное тестирование. У вас по-прежнему должен быть набор интеграционных и пользовательских приемочных тестов для вашей программы/системы; вместо этого пусть они проверят ваш доступ к данным.

person Randolpho    schedule 06.02.2009
comment
Мне нравятся комментарии к приведенному выше ответу, где на самом деле упоминается, что тестирование DAL — это интеграционное тестирование, а не модульное. С этой точки зрения, это не должно быть болью. Важно проверить, что вы написали правильный запрос, а для этого вы должны проверить, возвращает ли он правильные результаты. - person Juanu; 17.06.2021