【发布时间】:2014-01-29 21:43:22
【问题描述】:
我有一个带有两个静态方法的 Tool 类,doSomething(Object) 和 callDoSomething()。名称很直观,因为 callDoSomething 将其调用委托给 doSomething(Object);
public class Tool
{
public static void doSomething( Object o )
{
}
public static void callDoSomething()
{
doSomething( new Object());
}
}
我有一个用于 Tool 的测试类,我想验证是否调用了 doSomething(Object)(我将来也想做参数匹配)
@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;
}
}
}
如果直接调用,Verify 会选择 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(Object) 是从 callDoSomething() 调用的,以及对 doSomething 的参数执行一些参数匹配
【问题讨论】:
标签: android mockito powermock android-testing