我们在少数历史项目中使用了PowerMock。不幸的是,PowerMock已经死了,并且与Java 11不兼容。
而且我们正在使用mockStatic()。是的,我们知道它被认为是有害的-它在旧代码中,并且我们不希望现在不重写那些类。
有什么选项可以调整PowerMock以支持Java 11?还是可以轻松地用其他兼容Java 11的框架替换它?(Mockito不支持mockStatic)
我的Java班级中有以下方法:
public class AwsHelper {
private AmazonSQS sqs;
private void sendMessageToQueue(String message){
sqs = AmazonSQSClientBuilder.defaultClient();
SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.setQueueUrl("");
sendMessageRequest.setMessageBody(message);
sendMessageRequest.setMessageGroupId("");
sqs.sendMessage(sendMessageRequest);
}
Run Code Online (Sandbox Code Playgroud)
我希望能够模拟 的行为,sqs.sendMessage(sendMessageRequest);以便我的单元测试不会将消息发送到队列。
我在我的测试类中尝试这样做,但sqs实际上在我的测试执行时向队列发送了一条消息。假设这是由于被分配了AmazonSQSClientBuilder.defaultClient()。
我该如何解决这个问题?
public class AwsSQSReferralsUtilTest {
@Spy
@InjectMocks
private AwsHelper awsHelper;
@Mock
AmazonSQS sqs;
@BeforeClass
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@AfterMethod
public void afterEachMethod() {
Mockito.reset(awsHelper);
}
@Test
public void shouldSendMessage() {
Mockito.when((sqs.sendMessage(any(SendMessageRequest.class)))).thenReturn(new SendMessageResult());
awsHelper.sendMessageToQueue("");
}
}
Run Code Online (Sandbox Code Playgroud)