У меня есть класс Tool с двумя статическими методами, doSomething (Object) и callDoSomething(). Имена интуитивно понятны в том, что callDoSomething делегирует свой вызов doSomething (Object);Убедитесь, что статический метод был вызван другим статическим методом в PowerMock
public class Tool
{
public static void doSomething(Object o)
{
}
public static void callDoSomething()
{
doSomething(new Object());
}
}
У меня есть класс Test для инструмента, и я хотел бы проверить, если был назван йоЗотеЬЫпд (Object) (я хочу сделать аргумент Matching тоже в будущем)
@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), если он вызван напрямую. Я прокомментировал этот код выше. Verify НЕ забирает doSomething (Object) при использовании callDoSomething (это код, показанный выше). Это мой журнал ошибок при запуске кода выше:
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]
Я хотел бы избежать внесения каких-либо изменений в класс инструмента. Мой вопрос, как я могу проверить йоЗотеЬЫпд (Object) был вызван из callDoSomething(), а также выполнить некоторые сопоставления аргументов по парам DoSomething в
хорошо сэр, спасибо. – sudocoder