时间:2017-05-11 19:13:47

标签: junit mockito junit4 powermock powermockito

我需要一些测试方面的帮助。有以下方法:

    @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)

有什么想法吗?

0 个答案:

没有答案