mongodb - Spock:模拟 mongodb 批量更新,数组比较失败
问题描述
我正在尝试对一些使用 mongodb 批量更新的代码进行单元测试。
的数组UpdateOneModel
是在使用 java 流的方法中构造的:
updates = myArray.stream().map(createBulkUpdate)
.collect(Collectors.toList());
return userRepository.bulkUpdate(session, updates);
尝试在 spock 测试中验证这一点时:
then:
1 * userRepository.bulkUpdate(session, [
new UpdateOneModel<User>(new Document(), new Document())
])
我最终得到以下错误:
1: argument == expected
| | |
| | [UpdateOneModel{filter=Document{{}}, update=Document{{}}, options=UpdateOptions{upsert=false, bypassDocumentValidation=null, collation=null, arrayFilters=null}}] (java.util.ArrayList@5dc44d03)
| false
[UpdateOneModel{filter=Document{{}}, update=Document{{}}, options=UpdateOptions{upsert=false, bypassDocumentValidation=null, collation=null, arrayFilters=null}}] (java.util.ArrayList@2dbc6d0a)
在这两种情况下,查询的字符串表示形式完全相同。只是数组的地址似乎不同。我简化了整个测试,只使用空文档而不是实际查询,以便在调试期间排除查询本身的任何差异。
通常 spock 可以很好地处理数组及其内容,所以我对此失败并不感到惊讶。
任何想法为什么会失败或如何使其工作?或者更好的想法来测试类似的东西(理想情况下我不必模拟数据库,但目前我没有看到如何实现这一点的好方法)?
解决方案
推荐阅读
- sql - 下次服务器重新启动时未应用 Liquibase 更改日志
- hibernate - 是否可以在单个实体中映射多行?
- php - 使用 php 中的每个循环上传 zip 档案会导致 codeigniter 中 zip 文件中的 zip 档案重复
- python - Pygame箭头键不起作用
- scala - Scala Maven 编译器:NullPointerException
- nlp - 如何编写脚本以在斯坦福依赖解析器中保留标点符号
- java - 无法使用 Java 中的动画功能更改动画图像
- visual-studio-2017 - 如何在 VS 2017 中创建由多个快捷方式组成的自定义快捷方式?
- javascript - Ajax 请求未完成
- swift - 当我在 TableView 中向下滚动时,单元格数据会发生变化 - Swift 4