忽略类中的方法.Cobertura maven插件



我有maven 3, cobertura maven插件2.51和一些类。我需要知道我的课的考试覆盖率。但我不想测试setter/getter。所以我想忽略它们。

 <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <formats>
                        <format>html</format>
                        <format>xml</format>
                    </formats>
                    <check>
                        <haltOnFailure>false</haltOnFailure>
                        <lineRate>55</lineRate>
                        <branchRate>60</branchRate>
                        <packageLineRate>60</packageLineRate>
                        <packageBranchRate>60</packageBranchRate>
                        <totalLineRate>60</totalLineRate>
                        <totalBranchRate>60</totalBranchRate>
                    </check>
                    <instrumentation>
                        <excludes>
                            <exclude>com/FileCopier*.*</exclude>
                            <exclude>com/FileCopierWithCamel*.*</exclude>
                            <exclude>com/Main*.*</exclude>
                        </excludes>
                    </instrumentation>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>clean</goal>
                            <goal>cobertura</goal>
                            <goal>check</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>

然后我添加以下忽略块

 <ignores>
                            <!-- Ignore all setter and getter methods in your classes -->
                            <ignore>com.*.set*</ignore>
                            <ignore>com.*.get*</ignore>
                            <ignore>com.MyClass.getName</ignore>
                        </ignores>

但似乎行不通。

我发现了这个链接:http://jira.codehaus.org/browse/MCOBERTURA-52看起来这个问题已经有5年了。我的问题有解决办法吗?

如果它只是关于getter和setter,你可以设置ignoreTrival开关:

Cobertura Changelog -新的 --ignoreTrivial开关,告诉Cobertura忽略在覆盖率报告中:Getter方法简单地读取一个类字段;设置类字段的Setter方法;只设置类字段和调用父类的构造函数类的构造函数。

来源:是否仍然没有解决方案忽略setter/getter(其他琐碎的方法)与cobertura-maven-plugin?

如果你想更具体地忽略方法,你也可以使用ignoreMethodAnnotation开关:

Cobertura Changelog -新增 --ignoreMethodAnnotation开关,用于指定注释:,将导致Cobertura忽略方法。

文档:ignoreMethodAnnotation的文档(他们犯了一个小错误:他们定义了CoberturaIgnore注释,但是他们使用了CoverageIgnore)

pom.xml中的示例:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>cobertura-maven-plugin</artifactId>
  <version>2.7</version>
  <configuration>
    <instrumentation>
      <ignoreTrivial>true</ignoreTrivial>
      <ignoreMethodAnnotation>foo.bar.CoberturaIgnore</ignoreMethodAnnotation>
    </instrumentation>
  </configuration>
</plugin>

我不知道要不要忽略方法,但是你可以使用一个工具,它会自动为你的getter和setter生成单元测试,这样就覆盖了那些方法。我不知道这是否解决了你的确切问题,因为现在你的覆盖率不是低于预期,而是高于预期,但这似乎总比没有好。

这里有一个关于这个的问题:是否有一个Java单元测试框架可以自动测试getter和setter ?

我们使用Cobertura作为Spring-Boot Restful API单元测试代码覆盖率指标。

我们有类似的情况,为了忽略单元测试代码覆盖指标报告中的一些类,这些类使用hibernate本地查询,不能使用JPATest类进行单元测试(如在内存DB中)。无论出于何种原因,如果您需要cobertura从这些指标中忽略某些类,请执行以下操作…

pom.xml

<build>
        <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <formats>
                        <format>html</format>
                        <format>xml</format>
                    </formats>
                    <instrumentation>
                        <ignoreTrivial>true</ignoreTrivial>
                        <ignoreMethodAnnotation>com.thermofisher.micro.common.annotation.CoberturaIgnore</ignoreMethodAnnotation>           
                    </instrumentation>
                </configuration>
                <executions>
                  <execution>
                    <goals>
                      <goal>clean</goal>
                    </goals>
                  </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <reporting>
      <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <formats>
                        <format>html</format>
                        <format>xml</format>
                    </formats>
                    <instrumentation>
                        <ignoreTrivial>true</ignoreTrivial>
                        <ignoreMethodAnnotation>com.thermofisher.micro.common.annotation.CoberturaIgnore</ignoreMethodAnnotation>           
                    </instrumentation>
                </configuration>
            </plugin>
       </plugins>
    </reporting>

注释

package com.any.package.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target({ElementType.METHOD, ElementType.TYPE, ElementType.PACKAGE})
public @interface CoberturaIgnore {}

使用注释:

package com.any.package.repository;
import com.any.package.annotation.CoberturaIgnore;
@CoberturaIgnore
@Repository
public class SequenceIdRespositoryImpl implements SequenceIdRespository {
    @PersistenceContext
    private EntityManager entityManager;

    @CoberturaIgnore
    @Override
    public long getUserContactKey() {
        Query query = entityManager.createNativeQuery("select user_key_seq.nextval from dual");
        return getKey(query);
    }
}   

最新更新