即使在添加 @PrepareForTest 之后,Mockito 仍要求为该类添加 @PrepareForTest

新手上路,请多包涵

我有以下简单的代码。我有一个类 (TestClass),我想测试“someMethod”。我的“someMethod”调用了一个外部静态方法。我想 Powermock 那个静态方法返回给我一些虚拟对象。我在开始时有 @PrepareForTest(ExternalClass.class),但是当我执行它时会出现错误:

类 ExternalClass 未准备好进行测试。要准备此类,请将类添加到 '@PrepareForTest' 注释。如果您不使用此注释,请在类或方法级别添加注释。

请帮我指出我使用的方式有什么问题 @PrepareForTest

 @RunWith(PowerMockRunner.class)
@PrepareForTest(ExternalClass.class)
public class xyzTest {
    @Mock
    private RestTemplate restTemplate;

    @Mock
    private TestClass testClass;

    @BeforeClass
    private void setUpBeforeClass() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testSuccessCase() {
        Boolean mockResponse = true;
        ResponseEntity<Boolean> response = new ResponseEntity<Boolean>(mockResponse, HttpStatus.OK);
        SomeClass someClass = new SomeClass("test", "1.0.0", "someUrl", "someMetaData");

        PowerMockito.mockStatic(ExternalClass.class);

        Mockito.when(restTemplate.postForEntity(any(String.class), any(String.class), eq(Boolean.class))).thenReturn(response);
        Mockito.when(ExternalClass.getSomeClass(any(String.class))).thenReturn(someClass);

        Boolean result = testClass.someMethod("test");

        Assert.isTrue(result);
        Mockito.verify(restTemplate, times(1)).postForObject(any(String.class), any(String.class), any());
    }
}

原文由 ViV 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

确保将 @RunWith(PowerMockRunner.class) 添加到班级的顶部。

::edit:: 两年后……

永远不要使用 PowerMockito,你不需要。

如果你确实需要,你很可能违反了 SOLID 原则,你的设计是错误的。

改为修复您的设计。

原文由 wild_nothing 发布,翻译遵循 CC BY-SA 4.0 许可协议

与上一个答案一样,我的问题也是混合来自 TestNG 而不是 Junit Test 的 Test 注释。

 import org.junit.Test; // works

import org.testng.annotations.Test // did not work

非常深奥的错误,我花了 5 个多小时调试 :(

原文由 user2121316 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题