通过Maven

时间:2018-02-23 07:58:20

标签: maven unit-testing junit spock

我正试图通过单元测试覆盖我的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上发现了几个问题几乎相同或类似的问题,但在我的项目中没有一个响应。

我已经尝试过:

  1. 使用gmavenplus-plugin添加配置
  2. ** / * Spec.java这个扩展名.groovy(几个答案说.java可以解决这个问题,因为surefire不适用于groovy)
  3. 在groovy / folder
  4. 下移动文件TextAnalysisServiceSpec.groovy

    它们都不适合我。 TextAnalysisServiceTest.kt包含使用Kotlin编写的相同测试,该测试在执行期间编译和运行。但我仍然希望能够编写和运行Spock测试。

    修改: 看来问题是这个:

        <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
                <goal>test-compile</goal>
            </goals>
        </execution>
    

    覆盖已编译的groovy spock测试。因为如果我评论这部分配置,测试是在编译类下并在mvn测试期间运行。该怎么办?

1 个答案:

答案 0 :(得分:0)

此处解释了解决方案 - 编译Kotlin和Java源代码下的https://kotlinlang.org/docs/reference/using-maven.html

  

要编译混合代码应用程序,应在Java编译器

之前调用Kotlin编译器

混合这个词非常重要,因为这也适用于groovy。 : - )