У меня есть странная ситуация, когда этот тест проходит при запуске через IDE, но при запуске через ANT он завершается неудачей с исключением, отмеченным ниже. Я включил мои тестовые классы и цель муравья в качестве примера.
org.powermock.api.mockito.ClassNotPreparedException
The class simple.StaticStuff not prepared for test.
at org.powermock.api.mockito.expectation.reporter.MockitoPowerMockReporter.classNotPrepared(MockitoPowerMockReporter.java:32)
at org.powermock.api.mockito.internal.mockcreation.MockTypeValidatorFactory$DefaultMockTypeValidator.validate(MockTypeValidatorFactory.java:38)
С первого взгляда очевидным ответом было бы то, что ... ну, классу не хватает соответствующих аннотаций, помеченных PowerMockito, и поэтому мы ожидаем, что он потерпит неудачу. Но вы должны увидеть из тестовых классов ниже, что это наиболее определенно помечено @PrepareForTest.
Я включил классы и тестовую цель муравья, которая отобразит эту проблему.
Я действительно в растерянности, куда идти в этот момент. Я поменял версии банок, заменил время выполнения муравьев, упростил тестовые случаи, помолился всем и каждому богам и переместил свою рабочую станцию в область с лучшим фен-шуй, но все безрезультатно.
- Java 1.8.181
ANT Runtime 1.10.5 (в настоящее время текущий)
<junit fork="yes" printsummary="yes" haltonfailure="no" showoutput="no" failureproperty="test:failure">
<jvmarg value="-Xms128m" />
<jvmarg value="-Xmx1024m" />
<classpath>
<pathelement location="e:\testCompile" />
<pathelement location="E:\lib\junit-4.12.jar" />
<pathelement location="E:\lib\powermock-api-mockito-1.7.4.jar" />
<pathelement location="E:\lib\powermock-api-support-1.7.4.jar" />
<pathelement location="E:\lib\powermock-module-junit4-1.7.4.jar" />
<pathelement location="E:\lib\powermock-api-mockito-common-1.7.4.jar" />
<pathelement location="E:\lib\powermock-core-1.7.4.jar" />
<pathelement location="E:\lib\mockito-all-1.10.19.jar" />
<pathelement location="E:\lib\powermock-module-junit4-common-1.7.4.jar" />
</classpath>
<formatter type="xml" />
<batchtest fork="yes" todir="${test.report.dir}">
<fileset dir="${srctest.java}">
<include name="simple\TestSimpleStatic.java" />
</fileset>
</batchtest>
</junit>
<junitreport todir="${test.report.dir}">
<fileset dir="${test.report.dir}">
<include name="${test.report.files}" />
</fileset>
<report format="noframes" todir="${test.report.dir}" />
</junitreport>
</target>
Тестовые классы
package simple;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import junit.framework.TestCase;
@RunWith(PowerMockRunner.class) // Need for static mocking
@PrepareForTest(StaticStuff.class) // Classes to be static mocked
public class TestSimpleStatic extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
}
public void testWorks() {
String expected = "works";
String actual = "works";
assertThat(actual).isEqualTo(expected);
}
public void testStatic() {
PowerMockito.mockStatic(StaticStuff.class);
MockitoAnnotations.initMocks(this);
String expected = "new Stuff";
PowerMockito.when(StaticStuff.doGet()).thenReturn(expected);
String actual = StaticStuff.doGet();
assertThat(actual).isEqualTo(expected);
}
}
Тестируемый класс
package simple;
public class StaticStuff {
public static String doGet() {
return "from static";
}
}