2010-02-11 5 views
12

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

src/main 
    -package1 
    -classA 
    -classB 
    -package2 
    -classC 
src/test 
    -package1 
    -classATests 
    -classBTests 
    -package2 
    -classCTests 

Однако при выполнении интеграции тестирует организация становится менее жесткой. Например, у меня может быть тестовый класс, который тестирует classA и classB вместе. Где бы вы выразились? Как насчет тестового класса, который вместе тестирует классы A, classB и classC?

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

ответ

1

Возможно, создайте каталог интеграционных тестов под src/test? Конечно, для интеграционных тестов разделение становится менее ясным, но есть что-то, что группы A, B и C вместе, нет? Я бы начал с этого и посмотрел, как все идет. Трудно сразу придумать идеальное решение, а «ОК» лучше, чем без решения.

2

Наши интеграционные тесты, как правило, организованы таким же образом, как и наши спецификации. И они, как правило, собираются по категориям и/или функции.

+1

Этот ответ вообще не помогает и не заслуживает ни одного взлома: - | – t3chb0t

1

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

Если у вас есть настоящие интеграционные тесты, ассоциация с конкретными классами не имеет большого значения. Затем тесты классифицируются по предметным областям приложений (доменам) и по типам функциональных возможностей. Например, домены - это заказы, поставки, счета-фактуры, права и т. Д., А типы функций - транзакционные, веб-сообщения, обмен сообщениями, пакетные операции и т. Д. Их перестановки позволят вам с первого взгляда лучше всего организовать интеграционные тесты.

1

Я обнаружил, что при выполнении TDD не всегда бывает, что в модульных тестах существует соотношение 1: 1 между классами и тестами. Если вы это сделаете, вам будет сложно провести рефакторинг. Фактически после некоторого рефакторинга я обычно получаю около 50% 1: 1 муфт и 50% тестов, которые вы могли бы связать с несколькими классами или кластерами тестов, которые ссылаются на один класс.

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

Самое главное, что тест должен рассказывать историю. В BDD'ish термины: если у вас есть такие, когда это делается, это должно произойти. Тесты должны быть примерами того, как вы намерены использовать устройство, API, приложение, сервис, ...

Гранулярность и организация ваших тестов будут следовать из вашей сюжетной линии. Он не должен быть разработан с упрощенными правилами спереди.

+0

Хорошо сформированный ответ –

1

Я согласен с ответом f4. Такие тесты (уровень выше UT) обычно не имеют корреляции с конкретными классами. Ваши тесты должны соответствовать требованиям и спецификациям проекта.

Если вам действительно нужно разработать проект тестирования, соответствующий вашим требованиям к тестам, я бы рекомендовал следующий подход: отдельный проект с пакетами на требование или пользовательскую историю (в зависимости от вашего подхода к управлению требованиями). Например:

 
src/itest 
    -package1 - corresponds to story#1 
    -classA - test case1 
    -classB - test case2 
    -package2 - corresponds to story#1 
    -classC - test case2 
    -packageData - your common test data and utilities 

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

Смежные вопросы