Покрытие тестами для частной функции составляет 0 % при использовании офлайн-инструментов jacoco.

avatar
NKZ
8 августа 2021 в 18:54
66
0
0

Я использую автономное оборудование jacoco, но не вижу в отчете покрытия кода для частной функции getName(). Когда я запускаю отчеты jacoco, покрытие для getName() составляет 0%. Что-то не так с Junit или конфигурациями?

Ниже находится основной класс

public class CheckNameHandler implements RequestHandler<S3Event, Void> {
   @Override
   public Void handleRequest(S3Event s3Event, Context context) {
    String name = getName();
    return null;
  }
   private String getName(){
    return "test";
   }
}

Ниже приведен тестовый класс

public class CheckNameHandlerTest {
 @Test
 public void handlerSuccessTest() {
  CheckNameHandler spyCheckNameHandler = PowerMockito.spy(new CheckNameHandler());
  PowerMockito.doReturn("test").when(spyCheckNameHandler, "getName");
  S3Event s3Event = .......;
  Context context = .......;
  spyCheckNameHandler.handleRequest(s3Event, context);
}

Ниже pom.xml

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.8</version>
                <executions>
                    <execution>
                        <id>default-instrument</id>
                        <goals>
                            <goal>instrument</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-restore-instrumented-classes</id>
                        <goals>
                            <goal>restore-instrumented-classes</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${project.build.directory}/coverage.exec</dataFile>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <systemPropertyVariables>
                        <jacoco-agent.destfile>${project.build.directory}/coverage.exec</jacoco-agent.destfile>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build> 

А ниже приведены зависимости

<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito2</artifactId>
    <version>1.7.4</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.7.4</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>org.jacoco.agent</artifactId>
    <version>0.7.8</version>
    <scope>test</scope>
</dependency>

Источник
Godin
8 августа 2021 в 22:12
0

Отвечает ли это на ваш вопрос? Тесты JaCoCo + Mockito + Android: сообщается о нулевом покрытии

NKZ
9 августа 2021 в 00:09
0

Нет. Jacoco сообщает о покрытии кода для handleRequest как 100%, но не показывает покрытия для getName(). Как получить полное покрытие для класса без написания тестового примера для частного метода (getName())

Godin
9 августа 2021 в 09:13
0

Пожалуйста, внимательно прочитайте мой ответ на coderhelper.com/a/46614216/244993 - аналогично этому, ИМО, здесь явно что-то не так с вашими ожиданиями/пониманием основной вещи - издевательство: вы издеваетесь getName - PowerMockito.doReturn("test").when(spyCheckNameHandler, "getName");, так почему Вы ожидаете ненулевое покрытие для него?

Ответы (0)