Тестирование базы данных (.NET)
Занимаюсь разработкой базового функционала - база данных, обертка данных в объекты (не использую NHibernate или другие ORM-ы - иду своим путем).
Во время написания юнит тестов (NUnit - он самый;) возникает проблема, связанная с сохраняемостью состояния системы в самой БД, а это очень мешает повтороному прогону тестов (красная линия - зеленая линия - рефакторинг)
Mock-объекты в моем случае не катят, мне нужно тестировать функционал в хранимых процедурах и ограничения таблиц.
Кто как решает эту проблему?
Блокировать изменения состояния в принципе можно используя транзакции (TestCase обернуть в транзакцию, после прохождения ее откатить). Но тогда интересует начальное формирование базы данных и очистка ее после работы тестов - не в каждом тесте удобно откатывать транзакцию.
P.S. Сейчас курю Джимми Нильсона "Применение DDD ...", там где про РПТ и базы данных.
Тестирование, профайлинг и отладка хранимых процедур - это по-моему, делается средствами, предоставляемыми поставщиком СУБД.
Цитата: Zorkus
Ну как бы, очевидный вопрос..что за СУБД-то? :)
Тестирование, профайлинг и отладка хранимых процедур - это по-моему, делается средствами, предоставляемыми поставщиком СУБД.
Тестирование, профайлинг и отладка хранимых процедур - это по-моему, делается средствами, предоставляемыми поставщиком СУБД.
MsSQL 2005. Гммм. Хранимок много и просто так их не потестируешь, просто рисуя скрипт - неэффективно. К тому же использую механизм провайдеров данных и в будущем планируется переползать на другие СУБД, отсуюда следует что тестирование хранимок с привязкой к СУБД совсем не катит.
На мой взгляд тестирование должно быть на более высоком уровне - там где я оперирую высокоуровневыми объектами.
P.S Кстати, хранимки у меня выглядят как абстрактные методы специализированных классов (с однозначным мапингом аргументов), а вертают строго типизированные объекты или коллекции этих объектов.
Так процедуры на шарпе написаны?
Цитата: Zorkus
Так процедуры на шарпе написаны?
Нет конечно. T-SQL.
Это просто интеграция их в C# такая. У меня компилятор специальный занимается кодогенерацией вызова хранимок.