PowerMock可以与ElasticsearchIntegrationTest一起使用吗?

时间:2016-03-02 07:27:44

标签: java elasticsearch powermock powermockito

我一直在使用 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个

1 个答案:

答案 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.