Mockito要求为课程添加@PrepareForTest,即使在添加@PrepareForTest

2022-09-01 05:39:27

我有以下简单的代码。我有一个类(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());
    }
}

答案 1

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

::编辑:: 两年后...

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

如果你确实需要,你很可能已经打破了SOLID原则,你的设计是错误的。

改为修复您的设计。


答案 2

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

import org.junit.Test; // works

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

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


推荐