Статьи

Настройка проекта Maven для смешивания тестов Spock 1.x и JUnit 5

Я создаю пример проекта Groovy для Maven, который смешивает тесты Спока и JUnit 5 в одном проекте. В следующем разделе я опишу, как настроить такой проект Maven.

Включить Groovy в проекте

Прежде всего, вы должны включить Groovy в своем проекте. Одна возможность — добавить плагин GMavenPlus в ваш проект.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <version>1.6.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>addSources</goal>
                        <goal>addTestSources</goal>
                        <goal>compile</goal>
                        <goal>compileTests</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Цели addSources и addTestSources добавляют Groovy (тестовые) источники к основным (тестовым) источникам Maven. Расположение по умолчанию: src / main / groovy (для основного источника) и src / test / groovy (для источника тестирования). Цели compile и compileTests компилируют Groovy (тестовый) код. Если у вас нет основного кода Groovy, вы можете опустить addSource и скомпилировать .

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

1
2
3
4
5
6
7
<dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>2.5.6</version>
        </dependency>
  </dependencies>

Включить JUnit 5 в проекте

Самая простая настройка для использования JUnit 5 в вашем проекте — добавить зависимость JUnit Jupiter в путь к тестовому классу и настроить правильную версию плагина Maven Surefire (по крайней мере, версию 2.22.0).

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
<dependencies>
<!--... maybe more dependencies -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.junit</groupId>
                <artifactId>junit-bom</artifactId>
                <version>${junit.jupiter.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
        <!-- other plugins -->
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
        </plugins>
    </build>

Включить Спока в проекте

Выбор правильной зависимости от Спока зависит от того, какую версию Groovy вы используете в проекте. В нашем случае Groovy версия 2.5. Итак, нам нужен Spock в версии 1.x-groovy-2.5 в нашем пути к классам тестирования

1
2
3
4
5
6
7
8
9
<dependencies>
        <!-- more dependencies -->
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>1.3-groovy-2.5</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

Теперь ожидается, что тесты Спока и JUnit5 будут выполнены в сборке Maven. Но только тесты JUnit5 выполняются Maven. Итак, что случилось?

Я начал менять версию Maven Surefire Plugin на 2.21.0. Затем были выполнены тесты Спока, но тестов JUnit5 не было. Причина в том, что в версии 2.22.0 Maven Surefire Plugin провайдер JUnit4 заменяется провайдером платформы JUnit по умолчанию. Но Спок в версии 1.x основан на JUnit4. Это будет изменено в версии 2 Спока. Эта версия будет основана на платформе JUnit5. Таким образом, для Spock 1.x мы должны добавить зависимость JUnit Vintage в наш путь к тестовому классу.

1
2
3
4
5
6
7
8
<dependencies>
        <!-- more dependencies -->
          <dependency<!--Only necessary for surefire to run spock tests during the maven build -->
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

Это позволяет запускать старшие тесты JUnit (3/4) на платформе JUnit. В этой конфигурации оба теста, Spock и JUnit 5, выполняются в сборке Maven.

связи

Опубликовано на Java Code Geeks с разрешения Сандры Парсик, партнера нашей программы JCG. См. Оригинальную статью здесь: Настройка проекта Maven для смешивания тестов Spock 1.x и JUnit 5

Мнения, высказанные участниками Java Code Geeks, являются их собственными.