首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带集成测试的Jacoco多模块-未涵盖REST控制器

带集成测试的Jacoco多模块-未涵盖REST控制器
EN

Stack Overflow用户
提问于 2020-05-19 18:08:27
回答 1查看 1.1K关注 0票数 0

我在一个应用程序上有多个层(web、业务……)。我想通过使用jacoco-maven-plugin在声纳上发布每个测试(单元测试和集成测试)的覆盖范围。

在应用程序中,单元和集成测试涵盖了所有代码,并且pom.xml是正确的,但我有以下问题:

与这些控制器所调用的服务(业务层)不同,控制器代码不会被认为包含在jacoco报告中的测试中!

示例:

FunctionalityAServiceTest.java覆盖的FunctionalityAService.java (单元测试)

FunctionalityBService.java覆盖,FunctionalityBControllerIT.java不覆盖FunctionalityBController.java (集成测试)

你可以在这里找到一个例子:https://github.com/salimchami/maven-jacoco-multimodule-sonar

如何在控制器上包含覆盖率?

编辑1:

我不明白为什么必须创建一个模块来加重结果……为什么我们不能在根模块(根模块中的jacoco-aggregate目录)中这样做?

编辑2:

这是一个spring boot项目,我在集成测试中使用了spring mockMvc。因此,控制器不会被实例化调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-03 14:42:43

我找到了一个解决方案。在某些环境中(如果您没有jacoco-it文件夹),应该添加这个变量:@{failsafeArgLine}

Root pom:

代码语言:javascript
复制
<modules>
    <module>dao</module>
    <module>domain</module>
    <module>web</module>
    <module>coverage</module>
</modules>

<properties>
    <project.xmlReportPaths>coverage/target/site/jacoco-aggregate/jacoco.xml</project.xmlReportPaths>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>3.7.0.1746</version>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.5</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>3.0.0-M4</version>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.sonarsource.scanner.maven</groupId>
            <artifactId>sonar-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/*IT.java</exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>prepare-agent</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report</id>
                    <goals>
                        <goal>report</goal>
                    </goals>
                </execution>
                <execution>
                    <id>report-aggregate</id>
                    <goals>
                        <goal>report-aggregate</goal>
                    </goals>
                    <phase>verify</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>its</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <configuration>
                        <includes>
                            <include>**/*IT.java</include>
                        </includes>
                    </configuration>
                    <executions>
                        <execution>
                            <id>integration-test</id>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>it-agent</id>
                            <goals>
                                <goal>prepare-agent-integration</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>it-report</id>
                            <goals>
                                <goal>report-integration</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

覆盖模块pom:

代码语言:javascript
复制
<properties>
    <sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/../${project.xmlReportPaths}
        </sonar.coverage.jacoco.xmlReportPaths>
</properties>

<dependencies>
<!-- list of all sub modules dependencies -->
</dependencies>

子模块示例:

代码语言:javascript
复制
<properties>
    <sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/../${project.xmlReportPaths}</sonar.coverage.jacoco.xmlReportPaths>
</properties>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61888427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档