【发布时间】:2014-12-15 15:35:29
【问题描述】:
我的项目有以下调用链
Impl.execute() --> Helper.help() --> Proxy.doOperation()
我正在尝试在 PowerMock 和 TestNG 中执行 Impl.execute() 的测试用例。我遇到了异常
execute(ImplTest) Time elapsed: 0.391 sec <<< FAILURE!
java.lang.AssertionError:
Unexpected method call Proxy.doOperation({clientId=123456}, ""):
Proxy.doOperation({}, null): expected: 1, actual: 0
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:85)
at org.easymock.internal.ClassProxyFactory$MockMethodInterceptor.intercept(ClassProxyFactory.java:94)
at com.xxx.xxx.xxx.sync.services.Proxy$$EnhancerByCGLIB$$1937be76.doOperation(<generated>)
at com.xxx.xxx.xxx.sync.services.helper.Helper.getIdFromClient(Helper.java:39)
at com.xxx.xxx.xxx.sync.services.impl.Impl.execute(Impl.java:97)
at com.xxx.xxx.xxx.sync.services.impl.ImplTest.execute(ImplTest.java:130)
我已经写了下面的代码
@PrepareForTest({ApplicationContextLoader.class,Helper.class})
@PowerMockIgnore({"javax.management.*", "javax.xml.*","org.xml.*","org.w3c.dom.*"})
public class ImplTest extends PowerMockTestCase {
@ObjectFactory
/**
* Configure TestNG to use the PowerMock object factory.
*/
public IObjectFactory getObjectFactory() {
return new org.powermock.modules.testng.PowerMockObjectFactory();
}
@Test
public void execute() {
Impl impl = new Impl();
Proxy regProxy = PowerMock.createMock(Proxy.class);
PowerMock.expectNew(Proxy.class).andReturn(regProxy);
expect(regProxy.doOperation(Matchers.anyMap(),Matchers.any(String.class))).andReturn(someString);
PowerMock.replayAll();
Assert.assertEquals(impl.execute(request, ""),"");
PowerMock.verifyAll();
}
}
请帮助
【问题讨论】:
-
使用可编译的代码示例更容易回答您的问题。请将您的代码发布为minimal example,以证明您的问题。目前,由于缺少数据(
Impl和Proxy定义等),我们无法编译。但请不要将大量代码复制/粘贴到您的问题中,花时间为我们创建一个最小的示例。
标签: java unit-testing testng powermock easymock