测试从自定义对象到Spring Data Mongodb标准的转换

bxfogqkk  于 2022-11-21  发布在  Spring
关注(0)|答案(1)|浏览(134)

我有一个更干净的测试问题:我有一个SearchObject,它的属性对应于mongodb中的字段。SearchObject需要转换为mongodb查询以进行搜索。由于我们使用的是spring data mongodb,首先SearchObject被转换为Criteria的列表以进行搜索。这是在一个单独的类中完成的,它有如下函数(显示一个非常简单的例子):

private static String beginsWith(String match) { return "^" + Pattern.quote(match); }

public Criteria buildNameCriteria(SearchObject searchObject) {
    if (StringUtils.isEmpty(searchObject.getName())) {
        return new Criteria();
    }
    return Criteria.where("name").regex(beginsWith(searchObject.getName()), "im");
}

现在,为这样的方法编写单元测试的最佳方法是什么?

  • 是否将Criteria转换为Json并将其与预定义值进行比较?(这很容易在更新spring数据mongodb时中断)
  • 从标准中提取正则表达式并检查它是否正确?
  • 模拟Criteria方法并检查它们是否已被调用?

有没有办法测试这样的方法?或者代码应该被重构以允许更容易的测试?请记住,显示的代码只是一个例子,实际的标准通常更复杂。

gab6jxml

gab6jxml1#

我假设您希望测试条件是否按照您的预期进行,并且对Criteria的内部工作或生成的实际正则表达式不感兴趣。
所以我建议用一个SearchObject来设置测试数据:应该和不应该找到的文件。确保尽可能多地包括角落案例;可能会要求工程师同事提出一些极端情况。
将测试文档放入一个测试数据库中,看看SearchObject是否找到了它应该找到的那些文档。
模拟数据库还是真实的数据库?看情况。
编写mock可能会花费太多的精力,而且它在MongoDB驱动程序中的变化也会有些脆弱。
在真实的的DB中运行取决于是否有测试环境、与生产环境的差异有多大以及这些差异对代码的影响有多大。

相关问题