2

В настоящее время я выполняю минимальное покрытие JUnit на уровне модуля. Поэтому, если общий охват линии ниже определенного значения (80% в моем случае), то сборка не выполняется. Для этого я использовал maven-surefire-plugin с maven-enforcer-plugin, JUnit и JMockit. Файл pom частично выглядит следующим образом.Обеспечить минимальное общее покрытие JUnit по уровню класса?

<build> 
<plugins> 
.... 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit4</artifactId> 
      <version>2.18.1</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <systemPropertyVariables> 
      <coverage-outputDir>${basedir}/target/coverageReport</coverage-outputDir> 
      <coverage-output>html,merge</coverage-output>    
      <coverage-check>80</coverage-check> 
     </systemPropertyVariables> 
    </configuration> 
</plugin> 
<plugin> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>coverage.check</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <phase>test</phase> 
      <configuration> 
       <rules> 
        <requireFilesDontExist> 
         <files> 
          <file>coverage.check.failed</file> 
         </files> 
        </requireFilesDontExist> 
       </rules> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
.... 
</build> 
<dependencies> 
    .... 
     <dependency> 
      <groupId>org.jmockit</groupId> 
      <artifactId>jmockit</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jmockit</groupId> 
      <artifactId>jmockit-coverage</artifactId> 
      <version>1.17</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
     </dependency> 
    ....  
    </dependencies> 

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

Итак, можно ли каким-либо образом обеспечить соблюдение моего охвата на уровне класса?

ответ

2

Предоставление вам несерьезного ответа: не делайте этого. Не делайте свою сборку неудачной при пропущенных номерах покрытия!

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

Настоящая проблема заключается в следующем: вы хотите достичь определенного качества кода, и считаете, что получаете это, наказывая людей, когда они не соблюдают. Это не будет работать. Рано или поздно люди начнут обойти эту идею. Они будут искать быстрые способы «просто сделать сборку» счастливыми; игнорируя вашу идею о , улучшая качество кода, запрашивая разумное покрытие кода. Или какой-то менеджер приходит к вам, указывая, что новая функция/исправление сейчас важнее, чем текущая цель покрытия. Тогда что? Отключить проверку временно? Разрешить меньшее число?

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

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

+0

+1 Я действительно ценю эту идею. И полностью согласен с тобой. На самом деле я бы взял эту Идею в качестве ответа. Но бывают случаи, когда принуждение является единственным вариантом. Поэтому я собираюсь с более техническим решением. Но действительно хорошее объяснение и ответ. – mavi

+0

Добро пожаловать. Желаю вам удачи; надеюсь, приходит тот, кто может дать вам этот «настоящий технический» ответ, который вы ищете ;-) – GhostCat

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