将@ShouldMatchDataSet 与NoSQLUnit 一起使用时,有什么方法可以忽略某些字段吗?

Is there any way to ignore certain fields when using @ShouldMatchDataSet with NoSQLUnit?

我正在使用 NoSQLUnit 对 Mongo 数据库进行测试。

我想插入包含当前时间作为创建时间的新实体,然后使用@ShouldMatchDataSet 函数检查它们是否已正确创建。

我知道除了创建时间之外的所有具体值,有没有办法使用@ShouldMatchDataSet 忽略这个具体字段?

我使用名为 FlexibleComparisonStrategy 的自定义比较策略为 NoSQLUnit 做出了贡献,其中包括以下更改。它从 0.8.1 版本开始可用,要使用它只需将下一个注释添加到 class 签名:

@CustomComparisonStrategy(comparisonStrategy = MongoFlexibleComparisonStrategy.class)

public class SomeTests {

检查 Mongo 数据库中是否存在所有预期数据的比较策略。它不比较存储在数据库中的所有数据都包含在预期文件中,因此其他未在预​​期资源中定义的数据可能存在于 Mongo 中。它只是确保预期的数据存在。

检查以下断言:

  • 检查 Mongo 数据库中是否存在所有预期的集合,但接受存储在数据库中但未在预期文件中定义的其他集合。
  • 检查 Mongo 数据库中是否存在所有预期的对象,但接受存储在相同集合中但未按预期定义的其他对象。
  • 对于每个对象,检查所有设置为忽略的属性,其值存在于存储在数据库中的对象中,但它接受任何保存的值。

注释 @IgnorePropertyValue(properties = {String...}) 允许用户定义在检查预期对象时应忽略的属性。

属性定义接受两种格式:

  1. collection.property :当同时定义集合和 属性 名称时,排除只会影响指定的集合。
    • 例如:使用 @IgnorePropertyValue(properties = {"book.date"}),属性 日期 book 集合的每个对象中被忽略。如果不同集合中的其他对象具有 属性 date,则不会被忽略。
  2. 属性 :当仅定义 属性 名称时,它将被排除在任何预期集合中的所有对象之外。
    • 例如:使用 @IgnorePropertyValue(properties = {"date"}),属性 date 将在每个对象中被忽略,无论集合如何。

要忽略的属性的值应按照有效集合的规则命名,属性 名称在 Mongo DB: naming restrictions 文档中定义。

当数据库中存储的多个对象在忽略属性后与预期对象匹配时,会显示一条警告,通知已找到的对象数。