我有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);
}
}