Я использую автономное оборудование 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>
Отвечает ли это на ваш вопрос? Тесты JaCoCo + Mockito + Android: сообщается о нулевом покрытии
Нет. Jacoco сообщает о покрытии кода для handleRequest как 100%, но не показывает покрытия для getName(). Как получить полное покрытие для класса без написания тестового примера для частного метода (getName())
Пожалуйста, внимательно прочитайте мой ответ на coderhelper.com/a/46614216/244993 - аналогично этому, ИМО, здесь явно что-то не так с вашими ожиданиями/пониманием основной вещи - издевательство: вы издеваетесь
getName
-PowerMockito.doReturn("test").when(spyCheckNameHandler, "getName");
, так почему Вы ожидаете ненулевое покрытие для него?