测试powermock模拟http服务器超时客户端调用

问题描述:

我需要为connectTimeout和SocketTimeout异常编写测试用例。我正在使用PowerMock创建模拟对象。以下是我的代码。但是我的模拟对象获得空指针异常。任何帮助表示赞赏测试powermock模拟http服务器超时客户端调用

package com.util; 
import java.net.ConnectException; 
import java.net.SocketTimeoutException; 
import java.net.URL; 
import javax.net.ssl.HttpsURLConnection; 

import org.json.JSONObject; 
import org.powermock.api.mockito.PowerMockito; 
import org.powermock.core.classloader.annotations.PowerMockIgnore; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; 
import org.powermock.modules.testng.PowerMockObjectFactory; 
import org.powermock.modules.testng.PowerMockTestCase; 
import org.testng.Assert; 
import org.testng.IObjectFactory; 
import org.testng.annotations.ObjectFactory; 
import org.testng.annotations.Test; 

@PowerMockIgnore("javax.management.*") 
@SuppressStaticInitializationFor("com.Sender") 
@PrepareForTest(Sender.class) 
public class SenderCatalogTest extends PowerMockTestCase{ 


@ObjectFactory 
public IObjectFactory getObjectFactory() { 
    return new PowerMockObjectFactory(); 
} 
@Test 
public void testSocketExceptionEvents() throws Exception{ 
    String url="https://www.google.co.in/"; 
    URL mockURL = PowerMockito.mock(URL.class); 
    PowerMockito.whenNew(URL.class).withArguments(url).thenReturn(mockURL); 
    SocketTimeoutException expectedException = new SocketTimeoutException(); 
    PowerMockito.when(mockURL.openConnection()).thenThrow(expectedException); 
    Sender sender = new Sender(); 
    String input="{\"level\":3,\"event\":{\"name\":\"myevent\",\"Address\":\"xyz\"}}"; 
    JSONObject vent = new JSONObject(input); 
    Assert.assertNotNull(sender.send(vent)); 

请找到日志

at com.Sender.send(Sender.java:81) 
at com.SenderCatalogTest.timeout(SenderCatalogTest.java:33) 
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.junit.internal.runners.TestMethod.invoke(TestMethod.java:68) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316) 
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:88) 
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:96) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:288) 
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) 
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121) 
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) 
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121) 
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
2016-08-19 12:49:34,107 main ERROR Could not reconfigure JMX java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading for a different type with name "javax/management/MBeanServer" 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
at org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:250) 
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:194) 
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:71) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at org.apache.logging.log4j.core.jmx.Server.unregisterAllMatching(Server.java:328) 
at org.apache.logging.log4j.core.jmx.Server.unregisterLoggerContext(Server.java:250) 
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:162) 
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:138) 
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:502) 
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:561) 
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:577) 
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:212) 
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152) 
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45) 
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194) 
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:103) 
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43) 
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:42) 
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:329) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:349) 
at com.SenderUtil.<clinit>(SenderUtil.java:17) 
at com.SAEventSender.<clinit>(SASender.java:15) 
at com.Sender.send(Sender.java:148) 
at com.SenderCatalogTest.timeout(SenderCatalogTest.java:33) 
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.junit.internal.runners.TestMethod.invoke(TestMethod.java:68) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316) 
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:88) 
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:96) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:288) 
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) 
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121) 
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) 
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121) 
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

2016-08-19 12:49:34,182 main ERROR Could not reconfigure JMX java.lang.LinkageError: javax/management/MBeanServer 
at org.apache.logging.log4j.core.jmx.Server.unregisterAllMatching(Server.java:328) 
at org.apache.logging.log4j.core.jmx.Server.unregisterLoggerContext(Server.java:250) 
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:162) 
at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:138) 
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:502) 
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:561) 
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:577) 
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:212) 
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152) 
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45) 
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:155) 
at com.SenderUtil.initLogger(SenderUtil.java:64) 
at com.SenderUtil.<clinit>(SenderUtil.java:18) 
at com.SAEventSender.<clinit>(SASender.java:15) 
at com.Sender.send(Sender.java:148) 
at com.SenderCatalogTest.timeout(SenderCatalogTest.java:33) 
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.junit.internal.runners.TestMethod.invoke(TestMethod.java:68) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316) 
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:88) 
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:96) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:288) 
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86) 
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:208) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:147) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:121) 
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33) 
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45) 
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:123) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121) 
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

2016-08-19 12:49:34,616 pool-1-thread-1 ERROR Caught exception executing shutdown hook Shutdown callback for LoggerContext[name=6842775d] java.lang.LinkageError: javax/management/MBeanServer 
at org.apache.logging.log4j.core.jmx.Server.unregisterAllMatching(Server.java:328) 
at org.apache.logging.log4j.core.jmx.Server.unregisterLoggerContext(Server.java:250) 
at org.apache.logging.log4j.core.jmx.Server.unregisterLoggerContext(Server.java:237) 
at org.apache.logging.log4j.core.LoggerContext.stop(LoggerContext.java:295) 
at org.apache.logging.log4j.core.LoggerContext$1.run(LoggerContext.java:260) 
at org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry$RegisteredCancellable.run(DefaultShutdownCallbackRegistry.java:102) 
at org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.run(DefaultShutdownCallbackRegistry.java:72) 
at java.lang.Thread.run(Thread.java:745) 

2016-08-19 12:49:34,620 pool-1-thread-1 ERROR Caught exception executing shutdown hook Shutdown callback for LoggerContext[name=Default] java.lang.LinkageError: javax/management/MBeanServer 
at org.apache.logging.log4j.core.jmx.Server.unregisterAllMatching(Server.java:328) 
at org.apache.logging.log4j.core.jmx.Server.unregisterLoggerContext(Server.java:250) 
at org.apache.logging.log4j.core.jmx.Server.unregisterLoggerContext(Server.java:237) 
at org.apache.logging.log4j.core.LoggerContext.stop(LoggerContext.java:295) 
at org.apache.logging.log4j.core.LoggerContext$1.run(LoggerContext.java:260) 
at org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry$RegisteredCancellable.run(DefaultShutdownCallbackRegistry.java:102) 
at org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.run(DefaultShutdownCallbackRegistry.java:72) 
at java.lang.Thread.run(Thread.java:745) 

下面是我的发件人类send方法

public String send(JSONObject vent) throws IOException{ 
    String method; 
    int level; 
    HttpsURLConnection conn = null; 

    try { 

     URL obj = new URL(url); 
     conn = (HttpsURLConnection) obj.openConnection();// line number 81 
     conn.setRequestMethod(method); 
     initializeURL(conn); 
     .... 
     } 
     catch(SocketException e){ 
     } 
     catch(ConnectException e){ 
     } 
+0

你能否在这里粘贴你的堆栈跟踪,这将是更具体的分析和帮助回答。 –

+0

@KumarMekala如果你发布'Sender'类的代码,特别是'send()'方法,并且指向第81行(NPE发生的地方) – noscreenname

+0

@noscreenname我添加了发件人类,这也会很有帮助。并且还提到了行号81 – RK3

最后我能够解决它。 Incase再次得到同样的问题。在我的代码问题是withArguments行。我试图通过

String url =“https://www.google.co.in/”;

作为Url参数。但实际上它是空的。

URL mockURL = PowerMockito.mock(URL.class); PowerMockito.whenNew(URL.class).withArguments(url).thenReturn(mockURL);

withArguments尝试匹配参数是否相同。在我的模拟和实际对象在代码中具有相同的URL参数我能够继续出空指针异常

Acording到powermock documentation,在部分模拟构造函数,你应该做的类似的东西:

URL mockURL = PowerMockito.mock(URL.class); 
expectNew(File.class, url).andReturn(mockURL); 
replay(mockURL, File.class); 

此外,一定要使用注释@PrepareForTest(Sender.class)@RunWith(PowerMockRunner.class)

+0

我没有看到文档中提到的那些方法。是的,我使用'@PrepareForTest(Sender.class)和@RunWith(PowerMockRunner.class)'注释 – RK3

+0

@ RK3它是easymock库的一部分 – noscreenname

+0

不能用Powermock完成。我为什么要用easymock? – RK3