Как протестировать хранимую процедуру с LINQTOSQL

Может ли кто-нибудь сказать мне, как вы должны тестировать хранимую процедуру, учитывая, что LINQ datacontext.CreateDatabase (), который я использую для создания моей тестовой базы данных, не создает хранимую процедуру.

Кажется сложным проверить его в вашей тестовой процедуре, если его не существует.


person Coder 2    schedule 11.02.2011    source источник
comment
Это риторический вопрос? Какое отношение имеет модульное тестирование хранимой процедуры к linq to sql?   -  person JohnOpincar    schedule 11.02.2011
comment
Я создаю свою базу данных с помощью метода CreateDatabase () LINQTOSQL. Затем я заполняю его некоторыми данными и запускаю тесты.   -  person Coder 2    schedule 11.02.2011


Ответы (2)


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

person Adam Rackis    schedule 11.02.2011
comment
Я думаю, что вы имеете в виду «сначала нужно создать вашу хранимую процедуру, а затем ...» - person Kirk Broadhurst; 11.02.2011
comment
Если вы имеете в виду вручную добавить хранимую процедуру в контекст, то это не будет автоматический тест. - person Coder 2; 11.02.2011
comment
Я думаю, вы запутались. Автоматизация ваших тестов не включает автоматизацию создания ваших объектов БД. Как это могло быть? Вероятно, вы поддерживаете какой-то набор скриптов для создания базы данных. Один из этих скриптов создаст ваш SPROC. Используйте эти сценарии для создания тестовой БД, а затем напишите для нее несколько тестов. - person Adam Rackis; 11.02.2011
comment
В начале модульного теста я создаю базу данных, используя datacontext.CreateDatabase (), а затем заполняю ее. Затем я запускаю свои модульные тесты - person Coder 2; 11.02.2011
comment
Что ж, вам придется использовать другой подход, если вы хотите провести модульное тестирование своего SPROC. Есть много других способов создать вашу БД, кроме datacontext.CreateDatabase (); Обычно у разработчиков есть тестовая база данных, уже созданная для их модульных тестов. - person Adam Rackis; 11.02.2011

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

person J.W.    schedule 11.02.2011
comment
Он хочет провести модульное тестирование своего SPROC. Для этого ему нужно прикоснуться к своей базе данных. Имитация вашей БД для получения конкретных результатов для проверки вашей бизнес-логики - это нормально, но он хочет протестировать саму БД. - person Adam Rackis; 11.02.2011
comment
-1: пожалуйста, прочтите внимательно - он тестирует хранимую процедуру, а не бизнес-логику. - person John Saunders; 11.02.2011
comment
Я думаю, что этот ответ намекает на то, что это интеграционный тест, а не модульный тест. Вы не можете выполнить модульное тестирование хранимой процедуры. Вы можете выполнить модульное тестирование репозитория, но вы должны предоставлять фиктивные объекты. - person RPM1984; 11.02.2011
comment
Это был хороший ответ, учитывая, что я поставил его как модульный тест, когда мне действительно следовало быть более ясным и просто письменным тестом. Отредактировали вопрос. - person Coder 2; 11.02.2011
comment
Моя точка зрения в точности. Я удалил тег модульного теста и добавил тег интеграционного теста. - person RPM1984; 11.02.2011
comment
@RPM: вы чертовски уверены, что модульное тестирование хранимой процедуры! Почему нет? Это код. - person John Saunders; 11.02.2011
comment
Я думаю, что отрицательное голосование было немного резким. У JW был хороший совет, но не в данном конкретном случае. +1 за попытку внести разумный вклад - person Adam Rackis; 11.02.2011
comment
@ Джон Сондерс - возможно. Да, вы можете запустить его, посмотреть, вернет ли он результаты. Но unit test не должен попадать ни во что, кроме исполняемой единицы кода. Чтобы протестировать сохраненную процедуру, вам нужно будет пройти хотя бы DAL, а затем перейти к базе данных, чтобы она перестала быть единицей. - person RPM1984; 11.02.2011
comment
@RPM: вы можете заполнить чистую базу данных данными для конкретного теста, затем вызвать SP с определенными параметрами, проверить результаты, а затем откатить изменения БД. Идеальные модульные тесты. Я только что разобрался с десятками из них. - person John Saunders; 11.02.2011
comment
@RPM - Ваша аргументация является круговой. Модульные тесты не могут попасть в БД. Следовательно, любые тесты, попадающие в базу данных, a priori не являются модульными тестами. Модульные тесты МОГУТ попасть в базу данных. См. «Искусство модульных тестов» Ошерова или «Шаблоны тестов xUnit» Месароса. Оба заявляют, что модульные тесты могут попадать в БД в целях тестирования БД - person Adam Rackis; 11.02.2011