модульное тестирование отдыхающих веб-сервисов - PullRequest
3 голосов
/ 28 сентября 2011

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

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

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

Буду признателен за любую мысль о том, что у всех вас может быть правильный способ справиться с тестами, сохраняющими информацию в базе данных.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 28 сентября 2011

Обычно при тестировании веб-службы вы тестируете полный стек извне. Это означает, что вы запрашиваете ресурс и проверяете, соответствуют ли результаты вашим ожиданиям.

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

Исходя из мира Ruby, Огурец является идеальнымподход, поскольку он позволяет вам тестировать с высокого уровня.Когда вы комбинируете это с Rspec для проведения реального модульного тестирования (тесты нижнего уровня, которые напрямую запрашивают ваши объекты), вы получаете лучшее из обоих миров.Эти библиотеки даже поставляются с так называемым «очистителем базы данных», который будет управлять для вас заполнением и депопуляцией базы данных.

Вы можете найти следующий пост в блоге автора Rspec очень полезным, поскольку он блестяще объясняет, почему вам следует избегать слишкоммного издевательств и окурков.http://blog.davidchelimsky.net/2011/09/22/avoid-stubbing-methods-invoked-by-a-framework/

2 голосов
/ 28 сентября 2011

Вообще говоря, у вас есть два варианта:

1) Использовать выделенную тестовую базу данных с известными данными, на которых вы можете установить свои ожидания - замените БД на "нетронутую БД" перед началом тестирования.Это будет считаться интеграционным тестированием, поскольку на самом деле вы зависите от базы данных.

2.) Сделайте свой код независимым от фактического хранилища данных и передайте зависимость уровню постоянства.Для модульного тестирования вы можете написать (или смоделировать) пользовательский слой / объект персистентности, который позволит вам наблюдать за изменениями состояния, которые вы проводите в модульном тестировании.

Здоровое сочетание обоих в зависимости от сценария обычно обеспечивает хорошее покрытие.

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

0 голосов
/ 23 июля 2016

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

POST ( add a new record)  
GET  ( fetch the newly added record)  
PUT/PATCH ( modify the newly added record)  
DELETE (delete the newly added record)  

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

...