如何为r2dbc spring-boot库的DatabaseClient编写测试用例?

问题描述 投票:0回答:1

我正在上以下课程

@Repository
public class ItemRepository {

    @Autowired
    DatabaseClient databaseClient;

    @Autowired
    private Environment queries;

    protected String sql(String key) {
        return queries.getProperty(key);
    }

    public Flux<ItemObj> getValues(List<String> ids, Integer year,
                                                String family, List<String> pIds,
                                                List<String> tIds) {


        return databaseClient.sql(sql("get_values"))
                .bind(ids, Parameter.fromOrEmpty(ids, String.class))
                .bind(year, Parameter.fromOrEmpty(year, Integer.class))
                .bind(family, Parameter.fromOrEmpty(family, String.class))
                .bind(pIds, Parameter.fromOrEmpty(pIds, String.class))
                .bind(tIds, Parameter.fromOrEmpty(tIds, String.class))
                .map(row -> {
                    ItemObj itemObj = new ItemObj();
                    itemObj.setItemName(row.get("item_name", String.class));
                    //rest setters from the response
                    ...
                    ...
                    ...
                    return itemObj;
                })
                .all();
    }

}

这里 get_values 是在写入 sql 查询的某些属性文件中定义的。 该实现工作完全正常,并且能够根据我的查询获取数据。但是,我想为这个类编写单元测试用例?由于databaseClient中有一些链式方法,我无法准确地模拟和编写测试用例。有没有什么好方法为这个类编写测试用例?谁能举个例子吗?

unit-testing junit testcase r2dbc r2dbc-postgresql
1个回答
0
投票

像@DataJpaTest这样的数据库模拟有时不能做最好的工作(在内存数据库中,比如h2,与用于生产的数据库相比非常有限)考虑testconatiners,如果你使用postgresql,你可以使用this,否则你可以找到合适的您的数据库的库。

© www.soinside.com 2019 - 2024. All rights reserved.