두 개의 정적 메서드 doSomething (Object) 및 callDoSomething()이있는 Tool 클래스가 있습니다. 이름은 그 callDoSomething에서 직관적이다. doSomething (Object)에 대한 호출을 위임한다.정적 메서드가 PowerMock의 다른 정적 메서드에 의해 호출되었는지 확인
public class Tool
{
public static void doSomething(Object o)
{
}
public static void callDoSomething()
{
doSomething(new 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;
}
}
}
있는 호텔 상품을 확인 (내가 미래에 너무 일치 인수를하고 싶어) 확인하고 싶습니다 doSomething (Object) 직접 호출되는 경우. 위의 코드를 주석으로 처리했습니다. verify는 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 클래스를 변경하지 마십시오.
public class Tool{
public static boolean isFromCallDoSomethingMethod= false;
public static void doSomething(Object o){
}
public static void callDoSomething() {
doSomething(new Object());
isFromCallDoSomethingMethod= true;
}
}
당신은 할 수 있습니다 내 질문은 내가
좋은 선생님, 고마워요. – sudocoder