gpt4 book ai didi

unit-testing - Project Reactor block() 与 StepVerifier 中的正确测试模式

转载 作者:行者123 更新时间:2023-12-04 15:24:01 27 4
gpt4 key购买 nike

最近我注意到我的团队遵循两种方法来编写 Reactor 中的测试。第一个是在 .block() 的帮助下方法。它看起来像这样:

@Test
void set_entity_version() {
Entity entity = entityRepo.findById(ID)
.block();
assertNotNull(entity);
assertFalse(entity.isV2());

entityService.setV2(ID)
.block();

Entity entity = entityRepo.findById(ID)
.block();

assertNotNull(entity);
assertTrue(entity.isV2());
}

第二个是关于 StepVerifier 的使用.它看起来像这样:

@Test
void set_entity_version() {

StepVerifier.create(entityRepo.findById(ID))
.assertNext(entity -> {
assertNotNull(entity);
assertFalse(entity.isV2());
})
.verifyComplete();

StepVerifier.create(entityService.setV2(ID)
.then(entityRepo.findById(ID)))
.assertNext(entity -> {
assertNotNull(entity);
assertTrue(entity.isV2());
})
.verifyComplete();
}

以我的愚见,我会说第二种方法看起来更 react 。此外,官方文档对此非常明确:

A StepVerifier provides a declarative way of creating a verifiable script for an async Publisher sequence, by expressing expectations about the events that will happen upon subscription.

不过,我真的很好奇,应该鼓励使用什么方式作为在 Reactor 中进行测试的主要途径。 .block() 方法应该完全放弃还是在某些情况下有用?如果是,这些情况是什么?

谢谢!

最佳答案

你应该使用 StepVerifier .它允许更多选项:

  • 验证您预期通量中有 n 个元素
  • 验证通量/单声道是否完成
  • 验证是否会出现错误
  • 验证序列是否为 n 个元素后跟错误(无法使用 .block() 进行测试)

来自官方文档:

public <T> Flux<T> appendBoomError(Flux<T> source) {
return source.concatWith(Mono.error(new IllegalArgumentException("boom")));
}

@Test
public void testAppendBoomError() {
Flux<String> source = Flux.just("thing1", "thing2");

StepVerifier.create(
appendBoomError(source))
.expectNext("thing1")
.expectNext("thing2")
.expectErrorMessage("boom")
.verify();
}

关于unit-testing - Project Reactor block() 与 StepVerifier 中的正确测试模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62697139/

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