使用powermock和Jersey test测试Jersey rest服务时出现问题+;TestNg

使用powermock和Jersey test测试Jersey rest服务时出现问题+;TestNg,testng,powermock,integration-testing,jersey-test-framework,Testng,Powermock,Integration Testing,Jersey Test Framework,开发了一种使用运动衫的休息服务。现在我想为这个web服务编写一些集成测试,但是由于并不是web服务中使用的每个类都已经实现了,所以我需要模拟其中的一些类。例如,我有以下课程: public class ServiceA { public String getService() { return null; }} @Path("/myresource") public class ResourceController { @GET @Produces("text/plain") p

开发了一种使用运动衫的休息服务。现在我想为这个web服务编写一些集成测试,但是由于并不是web服务中使用的每个类都已经实现了,所以我需要模拟其中的一些类。例如,我有以下课程:

public class ServiceA {

public String getService() {
    return null;
}}

@Path("/myresource")
public class ResourceController {

@GET 
@Produces("text/plain")
public String getIt() {
    ServiceA a = new ServiceA();
    return a.getService();
}}
然后我想用Jersey测试框架和TestNg+Powermock(用构造函数模拟新对象)进行集成测试

我的pom依赖性:

    <dependency>
            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
            <artifactId>jersey-test-framework-provider-inmemory</artifactId>
            <version>2.21</version>
        </dependency> 

        <dependency>
            <groupId>org.glassfish.jersey.test-framework</groupId>
            <artifactId>jersey-test-framework-core</artifactId>
            <version>2.21</version>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-testng</artifactId>
            <version>1.7.0</version>
            <scope>test</scope>
        </dependency>
<dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito</artifactId>
            <version>1.7.0</version>
            <scope>test</scope>
        </dependency>

org.glassfish.jersey.test-framework.providers
jersey测试框架提供程序inmemory
2.21
org.glassfish.jersey.test-framework
jersey测试框架核心
2.21
org.powermock
powermock模块testng
1.7.0
测试
org.powermock
powermock api mockito
1.7.0
测试
但是在运行时,getIt()方法中的实例ServiceA仍然被初始化为新ServiceA对象,而不是mockA对象

你知道吗?谢谢

如果添加PowerMockIgnore({“javax.ws.”,“org.glassfish.”),请参见以下异常:

java.lang.ExceptionInInitializerError
    at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.<init>(ConditionalStackTraceFilter.java:17)
    at org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:41)
    at org.mockito.exceptions.base.MockitoException.<init>(MockitoException.java:30)
    at org.mockito.exceptions.misusing.MockitoConfigurationException.<init>(MockitoConfigurationException.java:18)
    at org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:66)
    at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:24)
    at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:12)
    at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:11)
    at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:24)
    at org.mockito.internal.configuration.injection.scanner.MockScanner.<init>(MockScanner.java:22)
    at org.mockito.internal.configuration.InjectingAnnotationEngine.injectMocks(InjectingAnnotationEngine.java:96)
    at org.powermock.api.mockito.internal.configuration.PowerMockitoInjectingAnnotationEngine.process(PowerMockitoInjectingAnnotationEngine.java:35)
    at org.powermock.api.extension.listener.AnnotationEnabler.injectSpiesAndInjectToSetters(AnnotationEnabler.java:72)
    at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:1846)
    at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:700)
    at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:415)
    at org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.injectMocksUsingAnnotationEnabler(PowerMockTestNGMethodHandler.java:76)
    at org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.invoke(PowerMockTestNGMethodHandler.java:48)
    at com.hp.ucmdb.rest.ResourceControllerTest_$$_jvstb11_0.setUp(ResourceControllerTest_$$_jvstb11_0.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:215)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:589)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:782)
    at org.testng.TestRunner.run(TestRunner.java:632)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
    at org.testng.SuiteRunner.run(SuiteRunner.java:268)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
    at org.testng.TestNG.run(TestNG.java:1064)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
Caused by: java.lang.NullPointerException
    at org.mockito.internal.configuration.plugins.Plugins.getStackTraceCleanerProvider(Plugins.java:17)
    at org.mockito.internal.exceptions.stacktrace.StackTraceFilter.<clinit>(StackTraceFilter.java:21)
    ... 49 more
java.lang.ExceptionInInitializeError
位于org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter。(ConditionalStackTraceFilter.java:17)
位于org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:41)
位于org.mockito.exceptions.base.MockitoException.(MockitoException.java:30)
位于org.mockito.exceptions.misusing.MockitoConfigurationException.(MockitoConfigurationException.java:18)
在org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:66)上
位于org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:24)
位于org.mockito.internal.configuration.plugins.PluginRegistry(PluginRegistry.java:12)
位于org.mockito.internal.configuration.plugins.plugins.(plugins.java:11)
位于org.mockito.internal.util.MockUtil.(MockUtil.java:24)
位于org.mockito.internal.configuration.injection.scanner.MockScanner.(MockScanner.java:22)
位于org.mockito.internal.configuration.InjectingAnnotationEngine.injectMocks(InjectingAnnotationEngine.java:96)
位于org.powermock.api.mockito.internal.configuration.PowerMockitoInjectingAnnotationEngine.process(PowerMockitoInjectingAnnotationEngine.java:35)
位于org.powermock.api.extension.listener.AnnotationEnabler.injectSpiesAndInjectToSetters(AnnotationEnabler.java:72)
位于org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:64)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
在org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:1846)上
位于org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:700)
位于org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:415)
位于org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.injectMocksUsingAnnotationEnabler(PowerMockTestNGMethodHandler.java:76)
位于org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.invoke(PowerMockTestNGMethodHandler.java:48)
在com.hp.ucmdb.rest.ResourceControllerTest\u$$\ uJVSTB11\u0.setUp(ResourceControllerTest\u$$\ uJVSTB11\u0.java)上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
位于org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:215)
位于org.testng.internal.Invoker.invokeMethod(Invoker.java:589)
位于org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
位于org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
位于org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
位于org.testng.TestRunner.privateRun(TestRunner.java:782)
位于org.testng.TestRunner.run(TestRunner.java:632)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
在org.testng.SuiteRunner.runSequential上(SuiteRunner.java:361)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
运行(SuiteRunner.java:268)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
在org.testng.testng.runSuitesSequentially上(testng.java:1244)
位于org.testng.testng.runSuitesLocally(testng.java:1169)
位于org.testng.testng.run(testng.java:1064)
运行(IDEARemoteTestNG.java:72)
位于org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
原因:java.lang.NullPointerException
位于org.mockito.internal.configuration.plugins.plugins.getStackTraceCleanerProvider(plugins.java:17)
位于org.mockito.internal.exceptions.stacktrace.StackTraceFilter.(StackTraceFilter.java:21)
... 49多

我相信模拟可能不会发生,因为您没有将PowerMock的objectfactory实现连接到TestNG中

为了使powermockito和TestNG相互协作,您必须执行以下操作:

  • 将TestNG配置为使用PowerMock对象工厂:您可以通过您的
    java.lang.ExceptionInInitializerError
        at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.<init>(ConditionalStackTraceFilter.java:17)
        at org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:41)
        at org.mockito.exceptions.base.MockitoException.<init>(MockitoException.java:30)
        at org.mockito.exceptions.misusing.MockitoConfigurationException.<init>(MockitoConfigurationException.java:18)
        at org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:66)
        at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:24)
        at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:12)
        at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:11)
        at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:24)
        at org.mockito.internal.configuration.injection.scanner.MockScanner.<init>(MockScanner.java:22)
        at org.mockito.internal.configuration.InjectingAnnotationEngine.injectMocks(InjectingAnnotationEngine.java:96)
        at org.powermock.api.mockito.internal.configuration.PowerMockitoInjectingAnnotationEngine.process(PowerMockitoInjectingAnnotationEngine.java:35)
        at org.powermock.api.extension.listener.AnnotationEnabler.injectSpiesAndInjectToSetters(AnnotationEnabler.java:72)
        at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:64)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:1846)
        at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:700)
        at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:415)
        at org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.injectMocksUsingAnnotationEnabler(PowerMockTestNGMethodHandler.java:76)
        at org.powermock.modules.testng.internal.PowerMockTestNGMethodHandler.invoke(PowerMockTestNGMethodHandler.java:48)
        at com.hp.ucmdb.rest.ResourceControllerTest_$$_jvstb11_0.setUp(ResourceControllerTest_$$_jvstb11_0.java)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
        at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
        at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:215)
        at org.testng.internal.Invoker.invokeMethod(Invoker.java:589)
        at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
        at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
        at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
        at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
        at org.testng.TestRunner.privateRun(TestRunner.java:782)
        at org.testng.TestRunner.run(TestRunner.java:632)
        at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
        at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
        at org.testng.SuiteRunner.run(SuiteRunner.java:268)
        at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
        at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
        at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
        at org.testng.TestNG.run(TestNG.java:1064)
        at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
        at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
    Caused by: java.lang.NullPointerException
        at org.mockito.internal.configuration.plugins.Plugins.getStackTraceCleanerProvider(Plugins.java:17)
        at org.mockito.internal.exceptions.stacktrace.StackTraceFilter.<clinit>(StackTraceFilter.java:21)
        ... 49 more
    
    @org.powermock.core.classloader.annotations.PowerMockIgnore({"javax.ws.*", "org.glassfish.*"})
    
    @org.powermock.core.classloader.annotations.PrepareForTest({ResourceController.class})