gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:38:41 25 4
gpt4 key购买 nike

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

最佳答案

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

::edit::两年后......

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

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

改为修复您的设计。

关于java - 即使在添加 @PrepareForTest 之后,Mockito 仍要求为该类添加 @PrepareForTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com