2

情况

我试图让Sonar显示FlexUnit从使用 Flex-Mojos 的 Maven 构建作业生成的代码覆盖率报告,但我没有运气——我得到的只是一个令人沮丧的“-”。


构建输出

结果是仪表板总是显示这个(左列):( 声纳项目仪表板 不,单元测试不会运行超过 90 分钟,而是 16 秒;不知道这里有什么问题)

声纳相关的控制台输出是这样的: Maven 控制台输出 所以一切似乎都工作正常(除了 Cobertura 之外没有文件未找到错误,我似乎无法以任何方式摆脱它,没有解析异常等)。


构建设置

pom.xml用于构建项目的代码如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>foo</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.3</version>
    </parent>
    <groupId>foo</groupId>
    <artifactId>bar</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <packaging>swc</packaging>
    <name>Bar</name>
    <dependencies>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito</artifactId>
            <version>1.4M5</version>
            <type>swc</type>
            <scope>external</scope>
        </dependency>
        <dependency>
            <groupId>com.adobe.flexunit</groupId>
            <artifactId>flexunit</artifactId>
            <version>4.1.0-8</version>
            <classifier>flex</classifier>
            <type>swc</type>
            <scope>external</scope>
        </dependency>
    </dependencies>
    <build>
        <testSourceDirectory>src/test/flash</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.sonatype.flexmojos</groupId>
                <artifactId>flexmojos-maven-plugin</artifactId>
                <version>4.2-beta</version>
                <configuration>
                    <coverage>true</coverage>
                    <debug>false</debug>
                    <optimize>true</optimize>
                    <omitTraceStatements>true</omitTraceStatements>
                    <verboseStacktraces>false</verboseStacktraces>
                    <defines>
                        <property>
                            <name>CONFIG::BUILD</name>
                            <value>"${project.version}"</value>
                        </property>
                    </defines>
                </configuration>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>asdoc</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>${project.build.directory}/asdoc/tempdita</directory>
                <targetPath>docs</targetPath>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <excludes>
                    <exclude>ASDoc_Config.xml</exclude>
                    <exclude>overviews.xml</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
    <properties>
        <sonar.language>flex</sonar.language>
        <sonar.sources>src/main/flash</sonar.sources>
        <sonar.tests>src/test/flash</sonar.tests>
        <sonar.surefire.reportsPath>target/surefire-reports</sonar.surefire.reportsPath>
    </properties>
</project>

我尝试了几种运行声纳的方法:

  1. dynamicAnalysis=reuseReports+ mvn clean install+mvn sonar:sonar

  2. dynamicAnalysis=true+mvn clean install sonar:sonar -Dmaven.test.failure.ignore=true

  3. dynamicAnalysis=true+ mvn clean install -DskipTests=true+ mvn sonar:sonar(<-- 不起作用:由于某种原因,在这种情况下,在 Flex-Mojos 的test-run目标执行期间,单元测试无法运行并出现 NullPointerException)。


有没有办法在 Sonar 仪表板中显示覆盖结果?我是否需要额外的插件(Emma、Clover 等)才能显示标准 Surefire 报告的覆盖范围?是否存在阻止此功能的已知问题?难道我做错了什么?


更新

我试过用 Sonar-Runner 运行 Sonar。有趣的是,仪表板随后完全删除了代码覆盖率小部件。检查运行器的控制台输出表明运行器没有执行FlexSurefireSensorsonar:sonarMaven 目标执行):

声纳运行器的控制台输出

sonar-project.properties文件包含:

sonar.projectKey=foo:bar
sonar.projectName=Bar
sonar.projectVersion=0.1.0-SNAPSHOT

sonar.language=flex
sources=src/main/flash
tests=src/test/flash

sonar.dynamicAnalysis=reuseReports
sonar.surefire.reportsPath=target/surefire-reports

我正在运行它,mvn clean install然后是sonar-runner.

4

2 回答 2

2

要获得代码覆盖率,您需要添加以下属性:

<sonar.cobertura.reportPath>target/site/coverage-cobertura/coverage.xml</sonar.cobertura.reportPath>

(或任何覆盖文件的路径)。

这记录在插件主页上

于 2013-04-03T08:45:30.483 回答
1

I think the property you are missing in your POM is sonar.dynamicAnalysis:

<properties>
    ..
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.surefire.reportsPath>target/surefire-reports</sonar.surefire.reportsPath>
</properties>

The Flex plugin documentation describes how to enable Unit test and code coverage reporting. It also recommends using the Java Runner, but it should be functionally similar to the Maven plugin launcher.

于 2012-09-10T18:29:10.803 回答