相关疑难解决方法(0)

PowerMock和Java 11

我们在少数历史项目中使用了PowerMock。不幸的是,PowerMock已经死了,并且与Java 11不兼容。

而且我们正在使用mockStatic()。是的,我们知道它被认为是有害的-它在旧代码中,并且我们不希望现在不重写那些类。

有什么选项可以调整PowerMock以支持Java 11?还是可以轻松地用其他兼容Java 11的框架替换它?(Mockito不支持mockStatic)

java junit powermock powermockito

9
推荐指数
2
解决办法
5497
查看次数

如何在单元测试中模拟 AmazonSQS 而不调用 SQS?

我的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)

java testng mockito amazon-sqs amazon-web-services

5
推荐指数
1
解决办法
2975
查看次数