Игнорировать методы в классе.плагин cobertura maven - PullRequest
3 голосов
/ 22 ноября 2011

У меня есть maven 3, плагин cobertura maven 2.51 и немного classe. Мне нужно знать тестовое покрытие моего класса. Но я не хочу тестировать сеттеры / геттеры. Поэтому я просто не обращаю на них внимания.

 <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 ]

6 голосов
/ 24 марта 2015

Если речь идет только о геттерах и установщиках, вы можете установить переключатель ignoreTrival:

Список изменений Cobertura - Новый переключатель --ignoreTrivial, которыйговорит Cobertura игнорировать следующее в отчете о покрытии: методы Getter, которые просто читают поле класса;Методы установки, которые устанавливают поле класса;Конструкторы, которые только устанавливают поля класса и вызывают конструктор суперкласса.

Источник: По-прежнему нет решения для игнорирования метода set / getter (другие тривиальные методы) с помощью cobertura-maven-plugin?

Если вы хотите более конкретно игнорировать методы, вы также можете использовать переключатель ignoreMethodAnnotation:

Список изменений Cobertura - НовоеПереключатель --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>
0 голосов
/ 10 ноября 2016

Мы используем Cobertura для показателей покрытия кода модульного тестирования Spring-Boot Restful API.

У нас была похожая ситуация. Чтобы игнорировать некоторые классы из отчетов о метриках покрытия кода модульного тестирования для классов с собственными запросами гибернации, которые не могут быть проверены модулем с помощью классов 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);
    }
}   
0 голосов
/ 22 ноября 2011

Я не знаю, как игнорировать методы , но вы можете воспользоваться инструментом, который автоматически создает модульные тесты для ваших геттеров и сеттеров, чтобы эти методы были покрыты. Я не знаю, что это решит вашу конкретную проблему, потому что теперь вместо более низкого, чем ожидалось, покрытия у вас будет больше, чем ожидалось, но оно кажется лучше, чем ничего.

Здесь возник такой SO вопрос: Существует ли среда модульного тестирования Java, которая автоматически тестирует геттеры и сеттеры?

...