java - 需要在集成测试用例中模拟 bean
问题描述
我正在通过将 testng 用于春季批处理作业来编写集成测试用例。在我的应用程序中,我使用 Google API 作为地址和邮件发件人来发送电子邮件。在我的集成测试用例中,在连接测试运行期间需要时间,最后发送异常,这看起来很丑陋且耗时。
我试图模拟 bean,但我不知道如何在集成测试用例中准确地做。
Google Api Code:
@Slf4j
public final class GoogleApiContext {
private static GeoApiContext context;
private GoogleApiContext() {
}
public static GeoApiContext getGeoApiContext(String apiKey, int maxQps) {
if (context == null) {
log.info("Creating google api context having key - {} and maxQps - {}", apiKey, maxQps);
context = new GeoApiContext.Builder().apiKey(apiKey).queryRateLimit(maxQps).build();
}
return context;
}
}
Mail Sender Code:
@Override
public Boolean sendMailWithAttachment(final MailBo mailBo, final String pathToAttachment, final String fileName) {
try {
log.info("Sending Email {}", mailBo);
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo(mailBo.getTo());
helper.setSubject(mailBo.getSubject());
helper.setText(mailBo.getText());
File file = new File(pathToAttachment);
helper.addAttachment(fileName, file);
mailSender.send(message);
log.info("Mail sent successfully");
return true;
} catch (MessagingException e) {
log.info("Mail Exception {}", e);
return false;
}
}
Integration Test Case:
@SpringBootTest(
classes = {ApplicationLauncher.class, BatchConfiguration.class, BatchTestConfig.class})
public class PostalJobTest extends AbstractTestNGSpringContextTests {
@Autowired
private JobLauncherTestUtils jobLauncherTestUtils;
@Autowired
JobLauncher dataloadJobLauncher;
@Autowired
private Job postalJob;
@Test
public void testPostalJob_valid_response() throws Exception {
String fileName = getFileName(FileLocation.POSTAL_VALID, FileLocation.TEMP_POSTAL_VALID);
JobParametersBuilder jobParametersBuilder = getJobParametersBuilder(fileName);
jobLauncherTestUtils.setJob(postalJob);
jobLauncherTestUtils.setJobLauncher(dataloadJobLauncher);
JobExecution jobExecution =
jobLauncherTestUtils.launchJob(jobParametersBuilder.toJobParameters());
Assert.assertEquals(jobExecution.getStatus(), BatchStatus.STARTING);
Thread.sleep(2000);
while (jobExecution.isRunning()) {
}
Assert.assertEquals(jobExecution.getStatus(), BatchStatus.COMPLETED);
}
我想模拟 GeoApiContext 和 MailSender 以进行集成测试用例,如果我可以创建一个虚拟服务器来实现响应,以便测试运行得更快,没有任何异常。请帮帮我。
解决方案
在集成测试用例中,没有直接模拟 bean 的方法。因此,替代解决方案是在您的应用程序中进行设置器注入,并在您的测试用例中更改该 bean。
// mail service
private JavaMailSender mailSender;
@Autowired
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
// test file
@Autowired
private MailServiceImpl mailService;
@BeforeClass
public void setJob() {
jobLauncherTestUtils.setJob(postalJob);
mailService.setMailSender(new JavaMailSenderTestImpl());
}
推荐阅读
- verilog - Verilog XST 忽略硬编码的输入值
- javascript - onBlur 事件不允许链接点击注册
- dask - YarnCluster 构造函数挂在 dask-yarn
- jquery - html5(数据和属性不同)不是工作数据更新吗?
- c# - 实现 WPF MVVM 对话服务
- excel - 从matlab中的函数外部索引excel的列
- image - Maven 项目 - 无法加载图像
- c# - ASP .NET Core 2 API 路由到 GET 方法,然后在第一次请求时 POST 方法
- ruby-on-rails - 如何在 rails 5 的 to_csv 方法中添加指向单个记录的链接,以便在 csv 导出中打印绝对 url?
- asp.net - 在 Angular/MVC 架构中处理会话