忽略课堂上的方法。 cobertura maven插件

时间:2011-11-22 11:16:38

标签: java testing maven cobertura

我有maven 3,cobertura maven插件2.51和一些classe。 我需要知道我班级的考试报道。但我不想测试setter / getters。所以我只想忽略它们。

 <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岁。 我的问题有解决办法吗?

3 个答案:

答案 0 :(得分:6)

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

  

Cobertura Changelog -      --ignoreTrivial切换告诉Cobertura忽略了     覆盖率报告中的以下内容:简单的Getter方法     读一个类字段;设置类字段的Setter方法;     只设置类字段并调用超级字符串的构造函数     类构造函数。

来源:Is there still no solution for ignoring setter/getter (other trivial methods) with the cobertura-maven-plugin?

如果您希望更具体地忽略方法,您还可以使用ignoreMethodAnnotation开关:

  

Cobertura Changelog -     用于指定注释的 --ignoreMethodAnnotation开关,     当出现在一个方法上时,会导致Cobertura忽略     覆盖率报告中的方法。

文档:Documentation of 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>

答案 1 :(得分:0)

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

这里有一个关于这个的问题:Is there a Java unit-test framework that auto-tests getters and setters?

答案 2 :(得分:0)

我们正在使用Cobertura进行Spring-Boot Restful API单元测试代码覆盖率指标。

我们有类似的情况为了忽略单元测试代码覆盖度指标的一些类,使用hibernate本机查询报告类,这些查询无法使用JPATest类(如内存数据库)进行单元测试..出于任何原因,如果你需要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);
    }
}