Интеграционные тесты создают файлы для упакованного jar

#maven #asciidoctor #spring-restdocs

#maven #asciidoctor #spring-restdocs

Вопрос:

Я генерирую фрагменты spring-restdocs с помощью rest assured в своих интеграционных тестах. С помощью maven и плагина failsafe, который по умолчанию integration-test verify использует фазу and . Проблема в том, что asciidoctor-maven-plugin (для создания конечного HTML-файла из фрагментов) и maven-resources-plugin (для копирования конечного HTML-файла в нужное место) запускаются перед интеграционными тестами prepare-package .

При этом asciidoctor, естественно, терпит неудачу, поскольку фрагменты еще не сгенерированы.

Если я настрою asciidoctor для запуска post-integration-test , он завершится успешно, но тогда готовой HTML-страницы нет в моем jar, потому что jar уже был создан на package этапе.

Поэтому я чувствую, что единственный вариант — запустить мои интеграционные тесты уже на tests этапе (вероятно, с помощью surefire вместо failsafe).

Я мог бы также отделить тесты, связанные с документацией, от остальных интеграционных тестов, но мне действительно нравится, когда они находятся в, казалось бы, правильном месте.

Интересно, есть ли лучшая практика, которую я игнорирую? Должны ли интеграционные тесты никогда не создавать что-то, что можно поместить в jar?

Мне кажется, что интеграционные тесты в maven предназначены для перекрестных тестов (следовательно, запускают их после пакета). И не так, как я их использую, просто для более крупных тестов, которые включают несколько частей (особенно DB) в одном jar.

Что я хотел бы:

  1. запустите все тесты
  2. скомпилируйте документацию
  3. упакуйте все в jar

Выдержка из моего pom.xml

             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
                <configuration>
                    <skip>${skipSurefire}</skip>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.22.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <includes>
                        <include>**/*IT.java</include>
                        <include>**/*E2ET.java</include>
                    </includes>
                </configuration>
            </plugin>

            <!-- Compile API documentation -->
            <plugin>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctor-maven-plugin</artifactId>
                <version>1.5.8</version>
                <executions>
                    <execution>
                        <id>generate-docs</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>html</backend>
                            <doctype>book</doctype>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework.restdocs</groupId>
                        <artifactId>spring-restdocs-asciidoctor</artifactId>
                        <version>${spring-restdocs.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

            <!-- Package API documentation -->
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.outputDirectory}/public/docs
                            </outputDirectory>
                            <resources>
                                <resource>
                                    <directory>
                                        ${project.build.directory}/generated-docs
                                    </directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
 

Ответ №1:

Фазы integration-test и verify — это просто привязки по умолчанию для интеграционного теста и цели проверки. Вы также можете привязать свои интеграционные тесты к test фазе:

                   ...
                  <artifactId>maven-failsafe-plugin</artifactId>
                  ...
                  <executions>
                    <execution>
                        <id>integration-tests</id>
                        <phase>test</phase>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                  </executions>
 

и таким образом достигается тот порядок, который вам нравится / нужен.