【问题标题】:Ignore methods in class. cobertura maven plugin忽略类中的方法。 cobertura maven插件
【发布时间】:2011-11-22 11:16:37
【问题描述】:

我有 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 年的历史了。 我的问题有什么解决办法吗?

【问题讨论】:

    标签: java testing maven cobertura


    【解决方案1】:

    如果只是关于 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>
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        我们有类似的情况为了忽略单元测试代码覆盖率指标报告中的某些类,这些类具有无法使用 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);
            }
        }   
        

        【讨论】:

          猜你喜欢
          • 2011-07-10
          • 2014-07-19
          • 1970-01-01
          • 1970-01-01
          • 2016-03-21
          • 1970-01-01
          • 2013-07-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多