Я использую Mockito и PowerMock с JUnit . Используемый инструмент покрытия - ECLEmma .
Код, который тестируется модулем PowerMock, покрытие отображается красным (непокрытый).
Вот мои макетные зависимости POM
<powermock.version>1.6.5</powermock.version>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-javaagent</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule</artifactId>
<version>2.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
Когда я использую
@RunWith(PowerMockRunner.class)
Junit работает успешно. но все покрытие КРАСНОЕ. Ничто не покрывается
Пересмешливая ссылка, используемая в Junit -
whenNew().withArguments.thenReturn();
ClassName someName = mock(ClassName.class);
WhiteBox.setInternal(classObject, String, classObject2);
Mockito.when().thenReturn();
Я пытался подписаться на этот пост
Проблема покрытия PowerMock ECLEmma и
http://www.notonlyanecmplace.com/make-eclemma-test-coverage-work-with-powermock/
Но когда я добавлю -
@Rule
public PowerMockRule rule = new PowerMockRule();
static {
PowerMockAgent.initializeIfNeeded();
}
вижу ошибку
java.lang.NoClassDefFoundError: org/powermock/classloading/ClassloaderExecutor
at org.powermock.modules.junit4.rule.PowerMockRule.apply(PowerMockRule.java:44)
at org.junit.runners.BlockJUnit4ClassRunner.withMethodRules(BlockJUnit4ClassRunner.java:365)
at org.junit.runners.BlockJUnit4ClassRunner.withRules(BlockJUnit4ClassRunner.java:355)
at
Caused by: java.lang.ClassNotFoundException: org.powermock.classloading.ClassloaderExecutor
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 18 more
Любые предложения о том, как это можно решить?
У меня такая ситуация -
SomeClassName mockedObjectOfSomeClassName = mock(SomeClassName.class);
whenNew(SomeClassName.class)
.withArguments("localhost", 8080)
.thenReturn(mockedObjectOfSomeClassName);
Чтобы решить исходную проблему, могут ли некоторые помочь мне сначала преобразовать это утверждение в
doReturn().when();
формат? Мне сказали, если мы сделаем это, это должно решить проблему.