테스트와 관련하여 도움이 필요합니다. 다음과 같은 방법을 갖는 것은 :void 메서드 내에서 정적 메서드가 한 번 호출되었다는 것을 테스트했습니다.
@PrePersist
public void prePersist(Tag tag) {
if (tagService.listUserTags(tag.getUser())
.size() > Constants.Tags.maxPerUser) {
TaskUtils.createTask(url, param);
}
}
나는 TaskUtils.createTask()를 한 번만 호출하는지 테스트하기를 원하지만 그것이 실행되는 내부 나는 코드를 원하지 않는다. 나는이 같은 시도 :
@Test
@PrepareForTest(TaskUtils.class)
public void testPrePersistMethodWhenTagCountOverLimit() {
[...]
when(tags.size()).thenReturn(Constants.Tags.maxPerUser + 1);
when (tagService.listUserTags(tag.getUser())).thenReturn(tags);
PowerMockito.mockStatic(TaskUtils.class);
PowerMockito.doNothing().when(TaskUtils.class, "createTask", Mockito.any(String.class), Mockito.any(String.class));
Method method = ClassUtils.getMethodWithAnnotation(TagListener.class, PrePersist.class);
method.invoke(tagListener, tag); //here the prePersist method is called
PowerMockito.verifyStatic(Mockito.times(1));
}
그러나 방법 TaskUtils.createTask()는 실제로 doNothing에도 불구하고 실행됩니다. 스택 추적 부분 :
java.lang.NullPointerException
at fi.util.TaskUtils.createTask(TaskUtils.java:90)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.powermock.reflect.internal.WhiteboxImpl.performMethodInvocation(WhiteboxImpl.java:1873)
at org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:773)
at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:753)
at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:466)
at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:106)
at fi.intra.test.domain.listener.TestTagListener.testPrePersistMethodWhenTagCountOverLimit(TestTagListener.java:92)
아이디어가 있으십니까?
은 url 및 param 인수 모두의 유형입니까? – pvpkiran
@pvpkiran, yes 그것은 –
입니다.이'@RunWith (PowerMockRunner.class)'가 있다고 가정합니다. 코드 나머지 부분은 괜찮아 보인다 – pvpkiran