2009-04-09 17 views
22

В нашем проекте мы запускаем как юниты, так и cobertura, используя maven. Проблема, с которой я сталкиваюсь, заключается в том, чтобегущие юниты и кобертуры с maven

  1. junit test cases работают дважды, один раз перед процессом создания банки, а затем еще раз для создания отчетов о покрытии cobertura. При запуске cobertura и junits с муравьем мы запускаем юнитов только один раз, так как кобертура работает вместе с юнитами. Есть ли способ сконфигурировать вышеуказанный случай с maven. Я знаю, что мы можем использовать свойство maven.test.skip для пропуска юнитов. Но когда я это делаю, я не могу видеть отчеты junit xml & html.
  2. Кроме того, в maven, как настроить junits для запуска в пакетном или параллельном режиме?

спасибо!

+0

Ваш второй вопрос на самом деле является отдельной проблемой, поэтому cna, по-видимому, пересматривается здесь: http://stackoverflow.com/questions/423627/running-junit-tests-in-parallel –

ответ

22

Пока я не могу найти точную страницу больше, я недавно прочитал дискуссию о том, почему запуск тестов дважды считается хорошей идеей. Приведенные ключевые вопросы касались влияния изменения кода байта Cobertura на точность ваших тестов. В некоторых случаях время выполнения кода может быть важным, изменение байтового кода может привести к провалу тестов, которые не выполняются в JUnit при запуске только в Cobertura и наоборот. По этой причине было рекомендовано, чтобы тесты выполнялись дважды. Большинство приведенных примеров были связаны с многопоточным поведением, но я полагаю, что могут быть другие случаи, когда изменение байтового кода может вызвать проблемы в ваших тестах. Испытания, выполненные в обоих направлениях, дают вам базовые результаты, а также уменьшают шансы отправить вас на охоту на диких гусей, если Кобертру на самом деле изменяет успех теста.

+4

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

+0

Не говоря уже о том, что тесты без инструментария работают намного быстрее. –

+0

@DavidValeri: Не могли бы вы предоставить ссылку на дискуссионную тему, которую вы ссылаетесь (просто отредактируйте наш пост)? –

1

Попробуйте добавить cobertura в качестве ссылки на область компиляции. И опубликуйте соответствующие части вашего пом.

+3

Не имел бы зависимости (с компилировать область), только полезно, если ваш проект каким-то образом пытается построить что-то поверх cobertura? Вероятно, это не то, что искал Аджай. –

1

Это происходит потому, что для выполнения отчета требуется выполнение теста, чтобы он мог создавать отчеты. Если на плагине сайта была цель «только для сайта», у которой не было аннотации @requiresDependencyResolution test, она могла быть привязана к фазе проекта prepare-package, и ваши отчеты будут генерироваться без двух тестов. К сожалению, в данный момент времени на этой цели нет (см. Мой question). См. Мой ответ на вопрос для получения подробных сведений об обходном пути.

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