Рубрики
Без рубрики

Пример покрытия кода Maven –JaCoCo

– Пример покрытия кода Maven – JaCoCo

В этой статье мы покажем вам, как использовать плагин JaCoCo Maven для создания отчета о покрытии кода для проекта Java.

Протестировано с

  1. Мавен 3.5.3
  2. Юнит 5.3.1
  3. jacoco-maven-плагин 0.8.2

1. Плагин JaCoCo Maven

1.1 Объявите следующий плагин JaCoCo в pom.xml файл.

	
		org.jacoco
		jacoco-maven-plugin
		0.8.2
		
			
				
					prepare-agent
				
			
			
			
				report
				test
				
					report
				
			
		
	

Он будет выполнять цель “отчета” JaCoCo на этапе тестирования Maven.

2. Модульный тест

2.1 Простой код Java для возврата сообщения и проверка пустой строки.

package com.mkyong.examples;

public class MessageBuilder {

    public String getMessage(String name) {

        StringBuilder result = new StringBuilder();

        if (name == null || name.trim().length() == 0) {

            result.append("Please provide a name!");

        } else {

            result.append("Hello " + name);

        }
        return result.toString();
    }

}

2.2 Модульный тест выше класса.

package com.mkyong.examples;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestMessageBuilder {

    @Test
    public void testNameMkyong() {

        MessageBuilder obj = new MessageBuilder();
        assertEquals("Hello mkyong", obj.getMessage("mkyong"));

    }

}

2.3 Запустите mvn-тест , отчет о покрытии кода JaCoCo будет сгенерирован на целевом/сайте/jacoco/*

$ mvn clean test

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mkyong.examples.TestMessageBuilder
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.012 s - in com.mkyong.examples.TestMessageBuilder
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.2:report (report) @ maven-code-coverage ---
[INFO] Loading execution data file D:\maven-examples\maven-code-coverage\target\jacoco.exec
[INFO] Analyzed bundle 'maven-code-coverage' with 1 classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.164 s
[INFO] Finished at: 2018-11-14T16:48:39+08:00
[INFO] ------------------------------------------------------------------------

2.4 Откройте target/site/jacoco/index.html файл, просмотрите отчет о покрытии кода:

  1. Зеленый – код протестирован или покрыт.
  2. Красный код не тестируется и не покрывается.
  3. Желтый код частично протестирован или покрыт.

3. Улучшение модульного теста

3.1 Добавление еще одного теста для красной линии.

package com.mkyong.examples;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestMessageBuilder {

    @Test
    public void testNameMkyong() {

        MessageBuilder obj = new MessageBuilder();
        assertEquals("Hello mkyong", obj.getMessage("mkyong"));

    }

	@Test
    public void testNameEmpty() {

        MessageBuilder obj = new MessageBuilder();
        assertEquals("Please provide a name!", obj.getMessage(" "));

    }
}

Просмотрите отчет еще раз.

$ mvn clean test

цель/сайт/jacoco/цель/сайт/jacoco/

3.2 Добавьте еще один тест для желтой линии, если условие.

package com.mkyong.examples;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class TestMessageBuilder {

    @Test
    public void testNameMkyong() {

        MessageBuilder obj = new MessageBuilder();
        assertEquals("Hello mkyong", obj.getMessage("mkyong"));

    }

    @Test
    public void testNameEmpty() {

        MessageBuilder obj = new MessageBuilder();
        assertEquals("Please provide a name!", obj.getMessage(" "));

    }

    @Test
    public void testNameNull() {

        MessageBuilder obj = new MessageBuilder();
        assertEquals("Please provide a name!", obj.getMessage(null));

    }

}

Просмотрите отчет еще раз.

$ mvn clean test

цель/сайт/jacoco/цель/сайт/jacoco/

Наконец, все линии протестированы, покрытие 100 %.

4. Часто задаваемые вопросы

4.1 Убедитесь, что покрытие линий должно соответствовать минимальным 90 %.

	
		org.jacoco
		jacoco-maven-plugin
		${jacoco.version}
		
			
				
					prepare-agent
				
			
			
				jacoco-report
				test
				
					report
				
			
			
			
				jacoco-check
				
					check
				
				
					
						
							PACKAGE
							
								
									LINE
									COVEREDRATIO
									0.9
								
							
						
					
				
			
			
		
	

Цель jacoco:проверка прикреплена к фазе проверки Maven.

$ mvn clean verify

[INFO] Analyzed bundle 'maven-code-coverage' with 1 classes
[WARNING] Rule violated for package com.mkyong.examples: lines covered ratio is 0.8, but expected minimum is 0.9

4.2 Как обновить выходную папку JaCoCo по умолчанию?

	
		org.jacoco
		jacoco-maven-plugin
		${jacoco.version}
		
			
				
					prepare-agent
				
			
			
				jacoco-report
				test
				
					report
				
				
				
					target/jacoco-report
				
			
		
	

Скачать Исходный Код

$mvn чистый тест # просмотреть отчет по адресу’target/site/jacoco/index.html ‘

Рекомендации

  1. Википедия: Инструменты покрытия кода Java
  2. Библиотека покрытия Java-кода JaCoCo
  3. JaCoCo в Eclipse IDE

Оригинал: “https://mkyong.com/maven/maven-jacoco-code-coverage-example/”