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





Если вы хотите проверить, что ваш уровень доступа к данным работает правильно, вам действительно нужно протестировать его на базе данных в какой-то момент, иначе вы на самом деле не тестируете его работу.
Какова роль издевательства, может ли кто-нибудь объяснить его использование по сравнению с ролью тестовой базы данных?
Тестовая база данных будет тем, с чем вы бы запускали свои интеграционные тесты (тесты вашего DAL). Мокинг будет использоваться для замены вашего DAL для модульных тестов, чтобы вы просто тестировали логику без фактического попадания в базу данных (например, вы убедитесь, что ваш код правильно вызывает ваш DAL, предоставляя имитацию).
Когда я тестирую свой DAL, я использую транзакции и откат в конце модульного теста, поэтому база данных чистая.
интересно, никогда не задумывался об этом, я уверен, что смогу погуглить, но есть ли у вас фрагмент кода, как это сделать?
Это не юнит-тест, а интеграционный тест, и это нормально. Многие фреймворки имеют свои интеграционные тесты, указывающие на отдельную тестовую базу данных с автоматическими транзакциями для каждого отдельного теста.
Выполняет ли NUnit этот автоматический переход при тестировании? Если да, то как мне это настроить?
Интересный подход, но я не уверен, что буду использовать его tbh, потому что вы не завершаете операцию. Почему бы не использовать метод разборки, который очищает после теста?
Модульное тестирование DAL - очень распространенная головная боль при разработке. По большей части я предлагаю вам пропустить это.
Большинство ORM в наши дни предлагают какой-то язык запросов, будь то LINQ или HQL, или какой-то другой вариант. Поскольку для правильного модульного теста требуется, чтобы вы фактически не попадали в базу данных, вам нужно издеваться над ORM, и это самая большая головная боль, о которой вы можете подумать. Это того не стоит, ИМО. В конечном итоге вы проверяете только то, что написали правильный запрос в своем коде; вы вообще не получаете регрессионного значения и можете лучше служить своим целям, просмотрев код.
Однако я не говорю, что вам не следует тестировать использование DAL; просто не пробуйте модульное тестирование. У вас все еще должен быть набор интеграционных и пользовательских приемочных тестов для вашей программы / системы; пусть вместо этого они проверят ваш доступ к данным.
+1 А если тестовой базы данных нет, ее действительно нужно создать (похоже, ОП озабочен обновлением данных).