Тесты были разделены на три группы:
- очень быстрые реальные модульные тесты (все по умолчанию) — должны выполняться очень часто во время разработки (из IDE или mvn test, пакета mvn)
- более медленная интеграция, но самодостаточные тесты (настройка контекста Spring и / или использование встроенной базы данных H2) — должны выполняться как минимум перед коммитом / push или во время работы над данной частью (из IDE или mvngration-test, mvn install)
- реальные интеграционные тесты (требующие доступа к удаленным серверам — например, тестирование веб-сервисов или REST) - должны выполняться ежедневно CI-сервером или разработчиками, работающими над интеграцией (mvn install, mvn интеграционный тест с включенным дополнительным профилем)
Для этого данные тесты (или классы тестов) должны быть помечены как «самоинтеграция» или «интеграция» (на уровне метода или класса):
|
1
2
|
@Test(groups = "self-integration")public void shouldInitializeChainedAppInfoProperly() { |
|
1
2
|
@Test(groups = "integration")public class FancyWebServiceIntegrationTest { |
Плагин Maven Surefire должен быть настроен таким образом, чтобы исключить группы тестирования «самоинтеграция» и «интеграция» из выполнения по умолчанию, а «самоинтеграция» добавить к «фазе тестирования интеграции»:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
<build> <plugins> (...) <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${ver.surefire-plugin}</version> <executions> <execution> <id>default-test</id> <!-- to override default configuration - in fact: unit tests --> <configuration> <excludedGroups>self-integration,integration</excludedGroups> </configuration> </execution> <execution> <id>self-integration</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <groups>self-integration</groups> <reportsDirectory>target/self-integration-surefire-reports/</reportsDirectory> </configuration> </execution> </executions> </plugin> </plugins></build> |
Кроме того (при необходимости) можно создать отдельный отдельный профиль с группой тестирования «интеграция», настроенной на этапе «интеграция-тест».
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
<profiles> (...) <profile> <id>integration</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${ver.surefire-plugin}</version> <executions> <execution> <id>integration</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <groups>integration</groups> <reportsDirectory>target/integration-surefire-reports/</reportsDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile></profiles> |
Рабочий пример можно найти в искусственной ветке AppInfo (pom.xml и пример тестового класса). Это легко адаптировать к вашим потребностям.
Все три группы тестов имеют отдельный формат отчетов, чтобы не перекрывать друг друга. В качестве расширения можно было бы объединить их в один сводный протокол испытаний.
Справка: часто выполняйте быстрые юнит-тесты, редко — медленную интеграцию — руководство по настройке TestNG и Maven от нашего партнера по JCG Марцина Заячковского из блога Solid Soft .