bounty将在3天后过期。回答此问题可获得+50的声誉奖励。BreenDeen正在寻找来自声誉良好来源的答案。
我正在尝试测试一个服务,如果在数据库中没有找到结果,该服务将抛出异常。我正在尝试通过抛出NotFoundException来测试没有找到值的情况。下面是该服务。我想测试没有找到结果但在测试中没有抛出预期异常的情况。我已经包含了测试代码段。
@Service
@RequiredArgsConstructor
public class ProductService {
private final ProductRepository ProductRepository;
public Mono<Product> getProductById(Long Id){
return ProductRepository.findProductById(Id)
.switchIfEmpty(Mono.error(new NotFoundException("No Product found")));
}
}
下面是我的测试,为简洁起见,省略了不相关的部分
def 'A Product resource by product id which does not exist in db'() {
given:
def id = 4444L
productRepository.findProductById(id) >> Mono.empty()
when: 'A call to get a Product is made to the service but cannot be found'
def result = productService.getProductById(id)
then: 'A NotFoundException is thrown from the service'
// Does not work
StepVerifier.create(result).expectError(NotFoundException)
}
1条答案
按热度按时间plicqrtu1#
我想您忘记在
StepVerifier
链的末尾使用verify()
。我们需要将verify()
或其他变体放在链的末尾。否则,StepVerifier
将不会订阅我们的发布服务器。下面是您的测试场景的一个工作示例:
您可以看到测试已通过:
如果使用更改存储库设置
然后测试按预期失败: