相关疑难解决方法(0)

如何将测试覆盖率添加到私有构造函数?

这是代码:

package com.XXX;
public final class Foo {
  private Foo() {
    // intentionally empty
  }
  public static int bar() {
    return 1;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是测试:

package com.XXX;
public FooTest {
  @Test 
  void testValidatesThatBarWorks() {
    int result = Foo.bar();
    assertEquals(1, result);
  }
  @Test(expected = java.lang.IllegalAccessException.class)
  void testValidatesThatClassFooIsNotInstantiable() {
    Class cls = Class.forName("com.XXX.Foo");
    cls.newInstance(); // exception here
  }
}
Run Code Online (Sandbox Code Playgroud)

工作正常,课程经过测试.但Cobertura表示,该类私有构造函数的代码覆盖率为零.我们如何为这样的私有构造函数添加测试覆盖率?

java testing code-coverage

106
推荐指数
8
解决办法
6万
查看次数

如何使Sonar忽略codeCoverage指标的一些类?

我在Maven有一个声纳配置文件.除代码覆盖率指标外,一切正常.我想让Sonar只为代码覆盖率指标忽略一些类.我有以下个人资料:

<profile>
    <id>sonar</id>
    <properties>
        <sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <excludes>
                        <exclude>**/*Suite*.java</exclude>
                        <exclude>**/*RemoteTest.java</exclude>
                        <exclude>**/*SpringTest.java</exclude>
                        <exclude>**/*CamelTest.java</exclude>
                        <exclude>**/*FunctionalTest.java</exclude>
                        <exclude>**/*IntegrationTest.java</exclude>
                        <exclude>**/*DaoBeanTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>                    
        </plugins>
    </build>
</profile>
Run Code Online (Sandbox Code Playgroud)

请帮忙.我试着添加类似的东西

<exclude>com/qwerty/dw/publisher/Main.class</exclude>
Run Code Online (Sandbox Code Playgroud)

但它没有帮助

UPDATE

我有一个正确的Cobertura配置文件.我试图将它添加到Sonar配置文件中,但我仍然有53%而不是Cobertura配置文件中的95%

<profile>
    <id>sonar</id>
    <properties>
        <sonar.exclusions>**/beans/jaxb/**</sonar.exclusions>
        <sonar.core.codeCoveragePlugin>cobertura</sonar.core.codeCoveragePlugin>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
                    <excludes>
                        <exclude>**/*Suite*.java</exclude>
                        <exclude>**/*RemoteTest.java</exclude>
                        <exclude>**/*SpringTest.java</exclude>
                        <exclude>**/*CamelTest.java</exclude>
                        <exclude>**/*FunctionalTest.java</exclude>
                        <exclude>**/*IntegrationTest.java</exclude>
                        <exclude>**/*DaoBeanTest.java</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>${cobertura.maven.plugin.version}</version>
                <configuration>
                    <instrumentation>
                        <excludes>
                            <exclude>com/qwerty/dw/dao/*</exclude>
                            <exclude>com/qwerty/dw/domain/*</exclude>
                            <exclude>com/qwerty/dw/beans/**/*</exclude>
                            <exclude>com/qwerty/dw/daemon/exception/*</exclude>
                            <exclude>com/qwerty/dw/daemon/Main.class</exclude>
                            <exclude>com/qwerty/dw/sink/Main.class</exclude>
                            <exclude>com/qwerty/dw/publisher/Main.class</exclude>
                            <exclude>com/qwerty/dw/publisher/dao/*</exclude>
                            <exclude>com/qwerty/dw/publisher/domain/*</exclude>
                        </excludes>
                    </instrumentation>
                    <formats>
                        <format>html</format>
                    </formats>
                    <aggregate>true</aggregate> …
Run Code Online (Sandbox Code Playgroud)

java maven sonarqube

37
推荐指数
6
解决办法
11万
查看次数

从cobertura的代码覆盖范围中排除特定方法?

我试图使用以下配置忽略检测中的所有toString()方法.这不是真的有效吗?这是使用cobertura作为maven插件.这是基于先前的答案从Cobertura的代码覆盖中排除方法.

<instrumentation>
    <ignores>
        <ignore>toString</ignore>
    </ignores>
</instrumentation>
Run Code Online (Sandbox Code Playgroud)

你觉得我做错了什么?我无法在cobertura文档中找到这样的例子.

java code-coverage cobertura

16
推荐指数
1
解决办法
3948
查看次数

通过Jenkins排除声纳报告中的java文件

我正在运行詹金斯的声纳.我想在声纳报告中排除一些java文件.这可能通过詹金斯?如果是的话,我该怎么做?

java jenkins sonarqube

6
推荐指数
3
解决办法
2万
查看次数

如何在 sonarqube 中为最终类的私有构造函数提供测试覆盖率?

我有一个最终的 util 类,并且添加了一个私有构造函数来隐藏默认的公共构造函数。我如何通过 jacoco 覆盖率报告在 sonarqube 中获取此类的覆盖率并在 Jenkins 中构建?

public final class Util {

      // My contructor
      private Util() {
          super();
     }
 }
Run Code Online (Sandbox Code Playgroud)

java jenkins jacoco sonarqube

4
推荐指数
1
解决办法
4330
查看次数

如何排除maven-emma插件检测的类?

我有一些单元测试(虽然他们是Android测试,我正在使用Robolectric,所以他们正在运行JVM).他们幸福地跑着,没有报道.

当我尝试覆盖时,我从emma-maven收到此错误:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:emma-maven-plugin:1.0-alpha-3:instrument (default-cli) on project android: Execution default-cli of goal org.codehaus.mojo:emma-maven-plugin:1.0-alpha-3:instrument failed: class [com.larvalabs.svgandroid.ParserHelper] appears to be instrumented already
Run Code Online (Sandbox Code Playgroud)

重要的是class .... appears to be instrumented already.

找到合适的文档非常困难,但这就是我从各种来源拼凑出的配置:

<plugin>
    <!-- This doesn't work, see below for a working configuration -->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>emma-maven-plugin</artifactId>
    <version>1.0-alpha-3</version>
    <inherited>true</inherited>                          
    <executions>
            <execution>
                    <phase>process-classes</phase>                               
                    <configuration>
                            <filters>
                                    <filter>-com.viewpagerindicator.*</filter>
                                    <filter>-com.actionbarsherlock.*</filter>
                                    <filter>-com.larvalabs.svgandroid.*</filter>
                            </filters>
                    </configuration>
                    <goals> 
                            <goal>instrument</goal>
                    </goals>
            </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

麻烦的是,排除了那些抱怨的软件包(我认为问题是这些是Android库项目无意中在某些路径列表中无意中结束了两次),现在它正在抱怨我自己的软件包.


一位同事错误地建议上面的<plugin>部分应该进入<project> <build> <pluginManagement>.

事实证明<configuration>应该直接在<plugin>中,并且应该删除剩余的<executions>位,请参阅答案.

plugins android emma maven

2
推荐指数
1
解决办法
5572
查看次数