Как заставить Cobertura приводить сборку M2 к сбою для низкого покрытия кода

@tehhowch совершенно прав, вместо того, чтобы делать гексагон (база 16), вы, по сути, хотите заняться математикой base-n. С указанным набором символов это будет математика по основанию 33 (если вы включите символ 0)

Каждое десятичное число представляет n ^ x степень. Это легко с десятичной. 100 - это 10 ^ 2, а 1000 - это 10 ^ 3. И вот что такое логарифм: log (1000) base 10 = 3, потому что 10 ^ 3 = 1000.

К счастью, мы можем получить журнал любой базы, выполнив log (n) / log (base). Отсюда следующая функция:

function convert(number) {
    var chars = '0abcdefghijklmnopABCDEFG123456789',
        base = chars.length, i = number, str = '',
        exp = Math.floor(Math.log(i)/Math.log(base))+1;
    while(exp--) {
        var bexp = Math.pow(base, exp);
        var j = Math.floor(i/bexp);
        i -= j*bexp;
        str += chars[j];
    }
    return str;
}
convert(90014234); // "bi62Gb"
convert(791424) // "F01B"
convert(23423); // "Ep3"
convert(33); // "a0"

Вы можете проверить метод, используя более общий набор символов, такой как шестнадцатеричный (основание 16), и убедившись, что числа выходят правильно. Вы бы подставили var chars = '0123456789abcdef' в функцию. Затем мы указываем шестнадцатеричное число и проверяем соответствие нашего вывода:

convert(0xdd5439af); // "dd5439af"
9
задан 4 revs, 2 users 100% 28 October 2009 в 03:12
поделиться

2 ответа

Насколько мне известно, , если для элемента задано значение true и любая из указанных проверок завершится неудачно, тогда Cobertura приведет к сбою сборки , о чем вы и просите. Но на самом деле этот элемент по умолчанию имеет значение true , если вы не укажете его, поэтому вам не нужно добавлять его в ваши проверки конфигурации . Ошибка сборки ниже любого порога покрытия является (или, по крайней мере, должна быть) поведением по умолчанию.

РЕДАКТИРОВАТЬ: Я провел дополнительное тестирование, и haltOnFailure , похоже, работает должным образом в моей среде (Maven 2.2.1. И версии 2.3, 2.2, 2.1 плагина, то есть версии 1.9. 2, 1.9, 1.8 Cobertura в Linux). Я обновляю этот ответ следующим результатом.

На самом деле, я ' Мы добавили элемент в мой файл pom. Возможно, я неправильно интерпретирую часть документации cobertura: check , в которой говорится: « По умолчанию привязывается к фазе жизненного цикла: verify », но без < Выполнение> элемент, cobertura: проверка не запускалась во время фазы verify моей сборки. Ниже показаны настройки, которые я использовал для плагина cobertura-maven-plugin:

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <check>
            <!--<haltOnFailure>true</haltOnFailure>--><!-- optional -->
            <!-- Per-class thresholds -->
            <lineRate>80</lineRate>
            <branchRate>80</branchRate>
            <!-- Project-wide thresholds -->
            <totalLineRate>90</totalLineRate>
            <totalBranchRate>90</totalBranchRate>
          </check>
        </configuration>
        <executions>
          <execution>
            <phase>verify</phase>
            <goals>
              <!--<goal>clean</goal>--><!-- works if uncommented -->
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Я получаю следующий результат при запуске mvn clean install в только что созданном проекте maven (с mvn archetype: create ) исправлен с помощью конфигурации плагина, упомянутой выше:

$ mvn archetype:create -DgroupId=com.mycompany.samples -DartifactId=cobertura-haltonfailure-testcase
...
$ mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building cobertura-haltonfailure-testcase
[INFO]    task-segment: [clean, install]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory /home/pascal/Projects/cobertura-haltonfailure-testcase/target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.samples.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.09 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/cobertura-haltonfailure-testcase-1.0-SNAPSHOT.jar
[INFO] Preparing cobertura:check
[WARNING] Removing: check from forked lifecycle, to prevent recursive invocation.
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [cobertura:instrument {execution: default}]
[INFO] Cobertura 1.9.2 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Instrumenting 1 file to /home/pascal/Projects/cobertura-haltonfailure-testcase/target/generated-classes/cobertura
Cobertura: Saved information on 1 classes.
Instrument time: 337ms

[INFO] Instrumentation was successful.
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /home/pascal/Projects/cobertura-haltonfailure-testcase/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /home/pascal/Projects/cobertura-haltonfailure-testcase/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.samples.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.098 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [cobertura:check {execution: default}]
[INFO] Cobertura 1.9.2 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Cobertura: Loaded information on 1 classes.

[ERROR] com.mycompany.samples.App failed check. Line coverage rate of 0.0% is below 80.0%
Project failed check. Total line coverage rate of 0.0% is below 90.0%

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Coverage check failed. See messages above.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18 seconds
[INFO] Finished at: Sat Oct 24 21:00:39 CEST 2009
[INFO] Final Memory: 17M/70M
[INFO] ------------------------------------------------------------------------
$ 

Я не тестировал maven 2.0.9, но на моем компьютере haltOnFailure генерирует ОШИБКУ СТРОИТЕЛЬСТВА и останавливает сборку. Я не Не вижу никаких различий в конфигурации вашего плагина, я не могу воспроизвести описанное вами поведение.

17
ответ дан 4 December 2019 в 11:08
поделиться

Добавьте следующее к <проверка/> конфигурация.

<haltOnFailure>true</haltOnFailure>
3
ответ дан 4 December 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: