Тесты были разделены на три группы:
- очень быстрые реальные модульные тесты (все по умолчанию) — должны выполняться очень часто во время разработки (из 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 .