- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Java
中有以下方法类(class):
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);
}
我希望能够模拟
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("");
}
}
最佳答案
我建议使用文章中的方法:https://github.com/mockito/mockito/wiki/Mocking-Object-Creation
您需要稍微更改一个类,以以下方式应用文章中的模拟方法:
AwsHelper
public class AwsHelper {
private AmazonSQS sqs;
public void sendMessageToQueue(String message) {
sqs = defaultClient();
SendMessageRequest sendMessageRequest = new SendMessageRequest();
sendMessageRequest.setQueueUrl("");
sendMessageRequest.setMessageBody(message);
sendMessageRequest.setMessageGroupId("");
sqs.sendMessage(sendMessageRequest);
}
protected AmazonSQS defaultClient() {
return AmazonSQSClientBuilder.defaultClient();
}
}
AwsSQSReferralsUtilTest
public class AwsSQSReferralsUtilTest {
@Spy
private AwsHelper awsHelper;
@Mock
private AmazonSQS sqs;
@BeforeClass
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@AfterMethod
public void afterEachMethod() {
Mockito.reset(awsHelper);
}
@Test
public void shouldSendMessage() {
//mocking object creation
doReturn(sqs).when(awsHelper).defaultClient();
when(sqs.sendMessage(any(SendMessageRequest.class))).thenReturn(new SendMessageRequest());
awsHelper.sendMessageToQueue("");
}
}
关于java - 如何在单元测试中模拟 AmazonSQS 而不调用 SQS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65956878/
我正在使用下面的 SQS jar aws-java-sdk-core-1.11.397.jar aws-java-sdk-sqs-1.11.397.jar 在我的场景中,我将多次使用相同的 SQS 并
我有两个工作类别的应用程序。我希望他们从 AWS SQS 中提取数据,但来自两个不同的账户。我正在使用 @SQSListener 来实现此目的。我无法为每个队列设置正确的 AmazonSQS 客户端。
我的 Java 中有以下方法类(class): public class AwsHelper { private AmazonSQS sqs; private void sendMessage
我正在构建一个实时日志记录机制,其中一个服务器将日志消息推送到亚马逊 SQS 队列,另一个服务器将拉取相应的消息并显示在实时监控网站上。现在我想知道在 tomcat 服务器上如何通过多个请求共享一个
我目前正在使用 Camel 开发一个 Spring 应用程序,它将轮询 SQS 作为应用程序的入口点(第一条路线)。我使用 Spring 的基于 XML 的方法成功地实现了这一目标。 我的 Amazo
我是一名优秀的程序员,十分优秀!