Практический способ сделать модульное тестирование с кодом, который изменяет среду - PullRequest
2 голосов
/ 16 августа 2010

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

Насколько я понимаю, основы модульного тестирования состоят в том, чтобы запустить некоторые процедуры в вашем коде, сравнить возвращаемое значение с ожидаемым значением и посмотреть, соответствует ли оно, чтобы определить, прошел тест или нет.

В простых примерах, которые я видел, это достаточно просто, поскольку они были просто тестами, тестирующими целочисленные или десятичные выходные значения, которые довольно просто проверить, поскольку все происходит более или менее в памяти.

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

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

Короче, мне любопытно узнать, как разработчики регулярных модульных тестов управляют такого рода тестами, изменяя состояние среды простым, быстрым и экономичным и простым способом?

Спасибо.

Я в основном пишу на C # и использую VS 2008, но я думаю, это довольно общий вопрос

Ответы [ 2 ]

4 голосов
/ 16 августа 2010

Вам нужно изучить Mocking frameworks .

Они позволяют вам настроить тесты , как если бы вы писали в базу данных , но вы нена самом деле вносить какие-либо изменения на всех.Вы тестируете свой код, а не соединение с базой данных, так что фиктивный объект возвращает значения , как если бы это был реальный код ваш тест действителен.чтобы проверить как действительные, так и недействительные случаи, и вы даже можете смоделировать потерю соединения с базой данных (например).

3 голосов
/ 16 августа 2010

Модульное тестирование относится к тестированию кода в отдельности, тесты, на которые вы ссылаетесь, являются интеграционными тестами или тестами проверки сборки.

При написании модульных тестов для фрагментов кода, в которых используются базы данных или потоки, вы обычно используете фальшивые фреймворки (я всегда советую moq) или любой из множества методов, которые фокусируются на тестировании кода изолированно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...