我有一个包含两个静态方法doSomething(Object)和callDoSomething()的Tool类。名称很直观,因为callDoSomething将其调用委托给doSomething(Object);验证一个静态方法是由PowerMock中的另一个静态方法调用的
public class Tool
{
public static void doSomething(Object o)
{
}
public static void callDoSomething()
{
doSomething(new Object());
}
}
我有工具Test类,我想验证是否DoSomething的(对象)被称为(我想要做的争论在未来匹配太)
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Tool.class })
public class ToolTest
{
@Test
public void toolTest()
{
PowerMockito.mockStatic(Tool.class);
Tool.callDoSomething();// error!!
//Tool.doSomething();// this works! it gets verified!
PowerMockito.verifyStatic();
Tool.doSomething(Mockito.argThat(new MyArgMatcher()));
}
class MyArgMatcher extends ArgumentMatcher<Object>
{
@Override
public boolean matches(Object argument)
{
return true;
}
}
}
验证拾起doSomething(Object)如果直接调用它。我在上面评论过这段代码。使用callDoSomething时,验证不会拾取doSomething(Object),(这是上面显示的代码)。这是我运行上面的代码时的错误日志:
Wanted but not invoked tool.doSomething(null);
However, there were other interactions with this mock.
at org.powermock.api.mockito.internal.invocation.MockitoMethodInvocationControl.performIntercept(MockitoMethodInvocationControl.java:260)
at org.powermock.api.mockito.internal.invocation.MockitoMethodInvocationControl.invoke(MockitoMethodInvocationControl.java:192)
at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:105)
at org.powermock.core.MockGateway.methodCall(MockGateway.java:60)
at Tool.doSomething(Tool.java)
at ToolTest.toolTest(ToolTest.java:22)
... [truncated]
我想避免对Tool类进行任何更改。我的问题是,我怎么能确认DoSomething的(对象)从callDoSomething(叫),以及对DoSomething的的PARAM执行一些参数匹配
好先生,谢谢。 – sudocoder