r2dbcEntityTemplate 查询在测试和调试中返回不一致的结果

问题描述

我们使用 r2dbc 构建了一个新的 spring-boot 微服务,底层数据库是 Postgres,以尝试响应式实现。

我们定义了一个 bean:

    public R2dbcEntityTemplate r2dbcEntityTemplate(DatabaseClient databaseClient){
        return new R2dbcEntityTemplate(databaseClient);
    }

我们像这样使用bean

        r2dbcEntityTemplate.count(query,DriverLog.class)
                .map(count -> {
                    resultDTO.setTotalResultCount(Math.toIntExact(count));
                    return count;
                });

        r2dbcEntityTemplate.select(DriverLog.class)
                .matching(query)
                .all()
                .map(driverLog -> resultDTO.addResultsItem(driverLogMapper.toDriverLogInfo(driverLog)));

以及相应的测试:

        StepVerifier.create(result).expectNextCount(1)
                .assertNext(driverLog -> {
                    assertEquals(driverLog.getTotalResultCount().intValue(),1);
                    assertEquals(driverLog.getResults().size(),1);
                    assertEquals(driverLog.getResults().get(0).getDriverId(),DRIVER_GID);
                });
            StepVerifier.create(result).expectNextCount(1)
                .assertNext(driverLog -> {
                    assertEquals(driverLog.getTotalResultCount().intValue(),DRIVER_GID);
                });

测试通过,但是当我执行 result.block() 时,结果对象有两个变量——结果计数和结果,两者都为空。我没有看到它进入 assertNext。

在调试期间,如果我在服务类中对表达式求值两次,第一次运行的结果为空,第二次运行时,它有值。

是否可以采取任何措施来提高一致性并实际断言(在 assertNext 中添加了记录器以查看它们是否记录,由于 driverLog 为空且未达到目的,因此它们不记录任何内容

>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)