Как я могу разбить длинный многоэтапный интеграционный тест? - PullRequest
2 голосов
/ 15 марта 2012

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

В настоящее время мой интеграционный тест находится в одной длинной функции с именем "testServletFunctionality ()", которая выглядит примерно так:

//Configure a mock request
//Post request to servlet X
//Check database for expected changes
//Re-configure mock request
//Re-post request to servlet X
//Check database for expected changes
//Re-configure mock request
//Post request to servlet Y
//Check database for expected changes
...

и каждый шаг configure / post / check содержит около 20 строк кода, поэтому функция очень длинная.

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

1 Ответ

0 голосов
/ 15 марта 2012

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

Sad.

Решение состоит в том, чтобы рассматривать эти тесты как производственный код: разделить длинные методы на несколько меньших, построить вспомогательные объекты, выполняющие определенные операции, чтобы вы могли сделать это в своем тесте:

@Test
public void someComplexText() throws Exception {
    new LoginHelper().loginAsAdmin();
    ....
}

или переместитьэтот код в базовый тестовый класс:

@Test
public void someComplexText() throws Exception {
    loginHelper().loginAsAdmin();
    ....
}
...