2013-04-03 2 views
6

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

<plugin> 
    <groupId>com.atlassian.maven.plugins</groupId> 
    <artifactId>maven-clover2-plugin</artifactId> 
    <version>3.0.4</version> 
    <configuration> 
     <licenseLocation>/location/to/clover.license</licenseLocation> 
     <generateXml>true</generateXml> 
     <generateHtml>true</generateHtml> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>instrument</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>main</id> 
      <phase>verify</phase> 
      <goals> 
       <goal>instrument</goal> 
       <goal>aggregate</goal> 
       <goal>clover</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>site</id> 
      <phase>pre-site</phase> 
      <goals> 
       <goal>instrument</goal> 
       <goal>aggregate</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

ответ

7

клевера плагин вилки жизненного цикла до test фазы с использованием инструментированный CLASSPATH.

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

Тогда клевер приходит и прошу для них снова запустить.

Теперь для моего стандартного предупреждения:

  • покрытия кода модифицирует байт-код, который выполняется таким образом, являются законными согласно спецификации JVM.
  • Такие преобразования могут привести к добавлению точек синхронизации при обновлении карты покрытия.
  • Такие дополнительные точки синхронизации могут ограничивать переупорядочение операций, которые JVM может выполнить.
  • Существуют и другие изменения, которые не связаны потоками, но довольно сложны для объяснения.

Если вы только когда-либо запускать тестовые случаи с освещение включено, вы не можете доверять скорости прохождения на 100%, как покрытие может маскировать ошибки

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

  • испытание проходит и без покрытия включен => вероятно, хорошо

  • Тест проходит с охватом включен, терпит неудачу, когда горит => берегитесь, ошибка здесь

  • Тест проходит с охватом оказался выключено, не работает, когда включено => если тест не является критическим по времени, а затем ошибка здесь, но если тесты выполняются на рабочей среде, ошибка может отображаться только тогда, когда -server полностью оптимизирует горячие пути

  • T Эст терпит неудачу с и без покрытия включено => ошибки

«золотое правило Стефана: Just run the damn tests twice»

+0

Это конкретно для клевера? Или все инструменты инструментария должны делать это? – Yamcha

+0

Не определен для клевера. Мой совет - дважды запустить тесты, но люди могут игнорировать этот совет (на свой страх и риск). JavaCoCo, пожалуй, проще всего настроить для запуска тестов только один раз ... со всеми рисками, которые я упоминаю –

0

clover2: инструмент цели вы используете работы таким образом, что он порождает параллельный строить жизненный цикл , Благодаря этому все артефакты, созданные во время сборки (классы, банки и т. Д.), Помещаются в каталог/target/clover или имеют суффикс -clover.jar. Это гарантирует, что у вас есть разделение между вашим «нормальным» кодом (т. Е. Без инструмента) и инструментальным.

Если вам не требуется такое разделение (например, вы запускаете «mvn test», а не «mvn deploy»), то я предлагаю использовать clover2: setup вместо clover2: instrument.

http://docs.atlassian.com/maven-clover2-plugin/latest/setup-mojo.html

Смежные вопросы