Когда проводить модульный тест, а когда - интеграционный тест - PullRequest
4 голосов
/ 12 октября 2011

Я новичок в тестировании в целом и работаю над приложением Grails.

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

Ответы [ 4 ]

5 голосов
/ 12 октября 2011

Одной из проблем интеграционных тестов является их скорость.Для меня интеграционные тесты занимают более 15 секунд.В это время определенные вещи выходят из-под контроля.

Я предпочитаю идти с юнит-тестами, которые начинаются не более чем за 2 секунды и могут быть запущены несколько раз в течение этих 15 секунд.Особенно с mockDomain(). Особенно с Grails 2.0, реализующим критерии и именованные запросы в модульных тестах .

Еще один аргумент для модульных тестов - они заставляют вас отделить ваш код.Интеграционные тесты всегда соблазняют вас просто полагаться на некоторые другие компоненты, существующие и инициализированные.

4 голосов
/ 12 октября 2011

Из раздела Grails Docs 9.1

Юнит-тестирование - это тестирование на уровне "юнит".Другими словами, вы тестируете отдельные методы или блоки кода без учета окружающей инфраструктуры.В Grails вам нужно быть в курсе различий между модульными и интеграционными тестами, потому что в модульных тестах Grails не внедряет динамические методы, присутствующие во время интеграционных тестов и во время выполнения.

ОтРаздел Grails Docs 9.2

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

Это означает, что модульный тест полностью изолирован от среды Grailsтогда как интеграционного теста нет.Согласно Скотту Дэвису , автору этой статьи , допустимо писать только интеграционные тесты ...

Единица против интеграционных тестов

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

Откровенно говоря, если вы хотите написать все свои тесты Grails как интеграциютесты, это просто хорошо со мной.Все команды Grails create- * генерируют соответствующие интеграционные тесты, поэтому большинство людей просто используют то, что уже есть.Как вы увидите через мгновение, для большинства вещей, которые вы хотите протестировать, требуется, чтобы вся среда была запущена и работала в любом случае, поэтому интеграционные тесты являются довольно хорошим заданием по умолчанию.Если у вас есть неосновные классы Grails, которые вы хотите протестировать, модульные тесты вполне подойдут.

0 голосов
/ 03 декабря 2014

Это действительно интересный и сложный вопрос, но на самом деле все зависит от того, что именно вы тестируете.

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

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

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

0 голосов
/ 12 октября 2011

Сначала пройдитесь по этой главе руководства по Grails http://grails.org/doc/latest/guide/9.%20Testing.html

В нем рассказывается о тестировании контроллеров и способности получить ответ контроллера следующим образом: controller.response.contentAsString

Теперь решаем, какойТест - это скорее искусство, а не наука.Я предпочитаю юнит-тесты, потому что они работают быстрее:)

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