我的服务类中有以下方法尝试发送电子邮件。如果我的电子邮件客户端抛出 RuntimeException,它将重试 4 次来调用电子邮件客户端并发送电子邮件。如果第四次重试后出现错误,它将恢复为
sendEmailFallback
方法。
@Retry(maxRetries = 4, delay = 1000, jitter = 200, retryOn = RuntimeException.class)
@Fallback(fallbackMethod = "sendEmailFallback")
public String sendEmailNow(EmailData data) {
client.sendEmail(data);
return "Email sent successfully!";
}
public String sendEmailFallback(EmailData data) {
LOGGER.error("Failed to send email after retries. Executing fallback method.");
return "Failed to send email after retries. Executing fallback method.";
}
我该如何测试这个?
目前,我的应用程序使用测试容器进行端到端测试。我正在将所有必要的配置文件加载到我的开放自由容器中,以执行断言 200 状态代码的测试。一旦测试容器启动,我就无法修改任何配置文件来模拟错误。我知道我可以创建开放自由容器的第二个实例,该实例加载使我的应用程序失败所需的文件,但我想避免这种实现。你有什么建议吗?
听起来您想故意强制代码发出运行时异常,但您无法让它知道它处于测试模式,因此无论您做什么,都必须在生产环境中安全使用。 (我假设当你说不能更改配置文件时,你也指的是环境变量之类的东西?)
我不知道 OpenLiberty 中有任何特殊工具可以强制运行时异常,如果有的话,您需要配置才能使用它们。一种可能性是“将调试器”附加到容器中的开放自由中。然后在 Eclipse 或您选择的 IDE 中手动将 client
的值设置为 null 以强制 NPE。