我告诉PowerMockito间谍返回一个值,那么为什么要调用实际方法



我正在尝试使用PowerMockito间谍测试一些代码,并且我正在存根一个方法(getRootTagMap--见下文)以返回在测试器中构造的值(使用PowerMockito,因为该方法是私有的。

但是,它始终调用实际方法,而不是返回构造的值,而不是返回值。

不知道我做错了什么

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.powermock.api.mockito.PowerMockito.spy;

@RunWith(PowerMockRunner.class)
@PrepareForTest({JsonAppMessageProcessor.class})
public class TestPropStoreAppController {
    @Test public void testSaveJsonAppTagChangesToPropStore() throws Exception {
        JsonAppMessageProcessor messageProcessorSpy = spy(new JsonAppMessageProcessor());
        when(messageProcessorSpy, "getRootTagMap", any(JsonAppTag.class)).thenReturn(constructReturnValue());
        // I tried it this way too...
        //  doReturn(constructReturnValue()).when(messageProcessorSpy, "getRootTagMap", any(JsonAppTag.class));
        // the following call calls the real getRootTagMap(JsonAppTag) method instead of returning the stub
        messageProcessorSpy.saveChanges(constructParameterForChanges());
    }
}

我不知道您正在使用的PowerMockito版本是什么,但以下方案对我有用:

doReturn(constructReturnValue()).when(messageProcessorSpy).getRootTagMap(any(JsonAppTag.class));

间谍对象进行模拟的方法的调用应在 when 方法返回的实例中调用,而不是像在常规模拟对象中那样在实例内部调用。

相关内容

  • 没有找到相关文章

最新更新