我一直在使用 ElasticsearchIntegrationTest 来测试我的代码而不使用elasticsearch服务器。我班上的私人会员很少,所以想到使用 Powermock 来访问私人会员。在运行测试时我得到例外。
Powermock可以与ElasticsearchIntegrationTest一起使用吗?
代码:
import org.elasticsearch.test.ElasticsearchIntegrationTest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest(AbstractTest.class)
public class PowerMockitTest extends ElasticsearchIntegrationTest{
AbstractTest abstractTest = mock(AbstractTest.class);
@Test
public void testPowerMokito() throws Exception{
doReturn(internalCluster().transportClient()).when(abstractImporter, "initClient");
}
}
例外:
java.lang.IllegalStateException:无法转换名为org.elasticsearch.test.ElasticsearchIntegrationTest的类。原因:找不到org.apache.http.impl.client.CloseableHttpClient org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:267) 在org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180) 在org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:70) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at java.lang.ClassLoader.defineClass(ClassLoader.java:642) 在org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:270) 在org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180) 在org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:70) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) 在java.lang.Class.forName(Class.java:348) 在org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:145) 在org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:40) 在org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:244) 在org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl。(JUnit4TestSuiteChunkerImpl.java:61) 在org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner。(AbstractCommonPowerMockRunner.java:32) 在org.powermock.modules.junit4.PowerMockRunner。(PowerMockRunner.java:34) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29) 在org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21) 在org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 在org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26) 在org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference。(JUnit4TestReference.java:33) 在org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference。(JUnit4TestClassReference.java:25) 在org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48) 在org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
引起:javassist.CannotCompileException:找不到org.apache.http.impl.client.CloseableHttpClient 在javassist.expr.NewExpr.replace(NewExpr.java:215) 在org.powermock.core.transformers.impl.MainMockTransformer $ PowerMockExpressionEditor.edit(MainMockTransformer.java:418) at javassist.expr.ExprEditor.loopBody(ExprEditor.java:212) at javassist.expr.ExprEditor.doit(ExprEditor.java:91) at javassist.CtClassType.instrument(CtClassType.java:1437) 在org.powermock.core.transformers.impl.MainMockTransformer.transform(MainMockTransformer.java:74) 在org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:252) ......还有36个
引起:javassist.NotFoundException:org.apache.http.impl.client.CloseableHttpClient 在javassist.ClassPool.get(ClassPool.java:452) at javassist.bytecode.Descriptor.toCtClass(Descriptor.java:592) at javassist.bytecode.Descriptor.getParameterTypes(Descriptor.java:439) 在javassist.expr.NewExpr.replace(NewExpr.java:188) ......还有42个
答案 0 :(得分:0)
Base on your stack trace I can guess that either org.elasticsearch.test.ElasticsearchIntegrationTest
or one of superclass or field depends on org.apache.http.impl.client.CloseableHttpClient
and the class cannot be found in Runtime, so it means class not in test class path.