当前位置: 首页 > 知识库问答 >
问题:

blockFirst()导致Reactor步进验证器试验失败

司空鸿熙
2023-03-14

下面是在数据库中检查重名的代码

public Mono<Void> validateDuplicateName(String name) throws RuntimeException {
    Flux<Customer> customerFlux = customerRepository.findByNameIgnoreCase(name);

    customerFlux.take(1).flatMap( customer -> {
        return Mono.error( new RuntimeException ("ABC99") );
    }).blockFirst();

    return Mono.empty();
}

下面是测试validateDuplicateName方法的测试脚本

when(customerRepositoryMocked.findByNameIgnoreCase(Mockito.anyString())).thenReturn(Flux.just(customerMocked));
StepVerifier.create(customerValidator.validateDuplicateName(Mockito.anyString()))
        .expectErrorMatches( exception -> exception instanceof RuntimeException )
        .verify();

但是测试失败,出现以下错误

java.lang.RuntimeException: ABC99
..
..
Suppressed: java.lang.Exception: #block terminated with an error
        at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:93)
        at reactor.core.publisher.Flux.blockFirst(Flux.java:2013)
        ... 34 more

我能找人帮忙吗?

共有1个答案

宁飞宇
2023-03-14

您的stepverifier实际上只能测试方法系统返回的mono.empty()。同时,您可以使用blockfirst,这将引发发布服务器发出的任何异常,从而缩短整个断言。

记住stepverifier允许您断言预期序列将异步发出的内容(包括错误,以onerror信号的形式)。如果因为创建序列的方法(validateduplicateName)抛出而无法创建序列,那么stepverifier就无能为力了。

但真正的问题是,您究竟为什么要阻塞一个具有mono返回类型并具有非常好的mono源代码的方法?返回的mono必须从该CustomerFlux派生。

 类似资料:
  • 我们使用Project Reactor按照下面中的代码异步运行特定操作。为了测试这段代码,按照下面的,在为异步操作设置Mono时,我们使用将Mono的结果传递给DirectProcessor,然后使用stepVerifier执行测试调用和断言。 stepverifier#assertNext的JavaDoc读取 使用者抛出的任何AssertionErrors都将在验证期间重新抛出。 是否可以,如果

  • 当与应用程序相关的身份验证功能未正确实现时,它允许黑客利用其他用户凭据破坏密码或会话ID或利用其他实施缺陷。 下面我们借助简单的图表来了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 匿名外部攻击者以及拥有自己帐户的用户可能会尝试从其他人那里窃取帐户。 攻击者的方法 - 在身份验证或会话管理功能中使用泄漏或漏洞。例如,公开的帐户密码,用于冒充用户的会话ID。 安全弱点

  • 我试图在我的项目中使用Hibernate验证器,但它不起作用。在以下行: 我得到以下例外情况: 我发现这个问题似乎与我的问题很相似。他将他的解决方案描述为 我想我的问题也是一样的。在http://hibernate.org/validator/documentation/getting-start/it上说: 这会传递地引入对Bean验证API的依赖关系(javax.Validation:vali

  • 从我创建项目开始,这就非常有效。但突然间开始崩溃。注册活动工作正常。但是这个登录活动正在崩溃。 Firebase 身份验证导致 Android 致命异常 这听起来和我的问题很相似,但我还是不明白为什么会这样。

  • 我有一个问题,通过mongo shell连接到MongoDB地图集,即使我已经做了一切正确的和三重检查数据用户名和密码,包括我的IP在白名单中,更改库名测试,并尝试在同一行中添加-密码 `$mongo“mongodbsrv://cluster******.mongodb。net/test”--用户名admin--密码admin MongoDB shell v4.4.6版连接到:mongodb://

  • 问题内容: 以下是我从GoLang获得的MongoDB连接拨号。但是它返回一个紧急消息“ SASL身份验证步骤服务器返回错误:身份验证失败。 ”。我的用户名,密码,hostAddrs和dbName是正确的。我在这里想念什么? 问题答案: 我遇到类似的错误并添加了参数,并且在我们连接到远程MongoDB时可以正常工作 在您的代码中使用以下类似格式: