我正在测试一个使用 Boot 的webflux库的类,我遇到了StepVerifier::expectError
的奇怪行为。(甚至String!)添加到方法中,测试通过。对于这个特定的测试,我的被测方法应该响应一个错误Mono,并且mono应该包含一个自定义的异常。我从this SO question中了解到,我在正确的块中运行StepVerifier
。这里出了什么问题?
受试类别:
@Service
@RequiredArgsConstructor
public class PaymentsBO {
private final ContractClient contractClient;
public Mono<Void> updatePaymentInfo(Request record) {
return contractClient
.getContract(UUID.fromString(record.getContractUuid()))
.onErrorResume(throwable -> Mono.error(() -> new CustomException(
"Contract Service responded with a non-200 due to "
+ throwable.getCause())))
.flatMap(
// happy-path logic
);
}
}
单元测试:
def "Returns an error if the Contract Service returns a non-200"() {
given:
def testSubject = new PaymentsBO(contractServiceMock)
def contractServiceMock = Mock(ContractClient)
when:
def result = testSubject.updatePaymentInfo(record)
and:
StepVerifier.create(result)
.expectError(String.class)
then:
1 * contractServiceMock.getContract(CONTRACT_UUID) >> Mono.error(new ContractServiceException())
}
1条答案
按热度按时间icnyk63a1#
在
StepVerifier
文档中,我们可以看到验证必须通过调用verify
方法之一来触发使用verify()或verify(Duration)在结果StepVerifier的出版者上触发结果StepVerifier的验证。(请注意,上述的某些终端预期会以“verify”为前置字符,以宣告预期并触发验证)。https://projectreactor.io/docs/test/release/api/reactor/test/StepVerifier.html
您的代码没有使用
verify
方法。请考虑以下两种情况:
without_verify
通过,因为没有触发任何验证。with_verify
失败,因为已触发验证。