gpt4 book ai didi

java - 如何为进行回退重试的方法编写单元测试? (在Java中使用FailSafe)

转载 作者:行者123 更新时间:2023-11-30 06:42:45 28 4
gpt4 key购买 nike

这是我想测试的方法:

void someMethodThatRetries(){
Failsafe.with( retryPolicy ).get(() -> callServiceX());
}

重试策略如下所示:

this.retryPolicy = new RetryPolicy()
.retryIf( responseFromServiceXIsInvalid() )
.withBackoff( delay, MAX_DELAY, TimeUnit.MILLISECONDS )

此方法调用服务 X 并在特定条件下重试对服务 X 的调用(来自 X 的响应没有特定值)。每次重试都会有延迟和退避。测试看起来像这样:

@Test
public void retriesAtMostThreeTimesIfResponseIsInvalid() throws Exception {

// Code that verifies that ServiceX got called 3 times. Service is called using a stub, and I am verifying on that stub

}

我正在编写一个测试,验证满足条件时服务 X 被调用 3 次(允许的最大重试次数为 3)。

由于延迟和回退,单元测试花费了太多时间。在这种情况下我们应该如何编写测试呢?

我想到的一个解决方案是对 RetryPolicy 进行单独的测试,让它重试 3 次,并单独测试它在满足条件时重试的事实。

我该怎么做?

最佳答案

我想说,您应该致力于对函数 callServiceXresponseFromServiceXIsInvalid 进行单元测试,但除此之外,您还处于集成测试和子系统领域-测试(又名组件测试)。这里具有算法性质的所有内容都隐藏在 FailSafeRetryPolicy 类和方法后面 - 您的代码只是调用它们。

因此,您的代码可能包含的许多错误在于与这些外部类的交互/正确使用这些外部类。例如,您可能搞乱了参数 delayMAX_DELAY 的顺序 - 只有在集成测试中才会发现这种情况。

单元测试级别也存在潜在的错误,例如delay的值可能与指定的时间单位不匹配。在我看来,在这种情况下通过单元测试来检查这一点的麻烦太大了。在重新查看中检查这一点,或者再次使用子系统测试来查看持续时间是否符合您的预期。

一些额外的警告:在进行集成测试和子系统测试时,请务必将注意力集中在您想要查找的错误上。这将帮助您避免最终有效地测试 FailSafe 和 RetryPolicy 类 - 希望这些类已经被库开发人员测试过。

关于java - 如何为进行回退重试的方法编写单元测试? (在Java中使用FailSafe),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44153449/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com