我正试图通过单元测试覆盖我的SpringBoot应用程序。申请书写在Kotlin。从现在开始,我使用Kotlin和jUnit进行了两次单元测试,并使用Spock进行了一次集成测试。使用Maven,我能够正确执行它们。我试图使用groovy / spock添加另一个单元测试。当我从文件运行此测试时,它可以正常工作。但是当我运行maven时,这个测试被忽略了,我不知道为什么。我已经花了几个小时试图找到解决方案,但没有运气。
这是测试文件夹结构:
├───groovy
│ │
│ └───integration
│ │ ITTestSuite.groovy
│ │
│ ├───pages
│ │ ZMainPage.groovy
│ │
│ └───test
│ ZMainSpec.groovy
│
├───kotlin
│ └───com
│ └───example
│ └───zou
│ │ ZouApplicationTests.kt
│ │
│ ├───model
│ │ ArticleTest.kt -- jUnit
│ │ PortalTest.kt -- jUnit
│ │
│ └───services
│ TextAnalysisServiceSpec.groovy -- Spock
│ TextAnalysisServiceTest.kt -- jUnit
Maven构建阶段:
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<goals>
<goal>generateStubs</goal>
<goal>compile</goal>
<goal>generateTestStubs</goal>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<wait>1000</wait>
<maxAttempts>180</maxAttempts>
</configuration>
<executions>
<execution>
<id>run-integration-tests</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
<skip>${skipITs}</skip>
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
<configuration>
<skip>${skipITs}</skip>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<jvmTarget>1.8</jvmTarget>
</configuration>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<skipTests>${skipUTs}</skipTests>
<includes>
<include>**/*Spec.java</include>
<include>**/*Test.*</include>
</includes>
</configuration>
</plugin>
问题在于,无论何时我运行
mvn test
mvn verify
仅启动使用集成测试的jUnit测试。 TextAnalysisServiceSpec.groovy
永远不会被执行。
以下是Maven输出的一部分:
[INFO] --- gmavenplus-plugin:1.6:compile (default) @ zou ---
[INFO] Using Groovy 2.4.13 to perform compile.
[INFO] No sources specified for compilation. Skipping.
我在StackOverflow上发现了几个问题几乎相同或类似的问题,但在我的项目中没有一个响应。
我已经尝试过:
它们都不适合我。 TextAnalysisServiceTest.kt
包含使用Kotlin编写的相同测试,该测试在执行期间编译和运行。但我仍然希望能够编写和运行Spock测试。
修改: 看来问题是这个:
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
覆盖已编译的groovy spock测试。因为如果我评论这部分配置,测试是在编译类下并在mvn测试期间运行。该怎么办?
答案 0 :(得分:0)
此处解释了解决方案 - 编译Kotlin和Java源代码下的https://kotlinlang.org/docs/reference/using-maven.html:
要编译混合代码应用程序,应在Java编译器
之前调用Kotlin编译器
混合这个词非常重要,因为这也适用于groovy。 : - )