在NoSQLUnit中使用@ShouldMatchDataSet时有没有办法忽略某些字段?

时间:2015-01-26 12:15:45

标签: java mongodb unit-testing nosql

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

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

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

1 个答案:

答案 0 :(得分:4)

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

@CustomComparisonStrategy(comparisonStrategy = MongoFlexibleComparisonStrategy.class)

public class SomeTests {

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

检查以下断言:

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

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

它接受两种属性定义格式:

  1. collection.property :如果同时定义了集合和属性名称,则排除只会影响指定的集合。
    • 例如:使用 @IgnorePropertyValue(properties = {" book.date"}),将在每个对象中忽略属性日期 book 集合。如果不同集合中的其他对象具有 date 属性,则不会被忽略。
  2. 属性:仅定义属性名称时,它将从任何预期集合中的所有对象中排除。
    • 例如:使用 @IgnorePropertyValue(properties = {" date"}),无论是否在每个对象中都会忽略属性 date 集合。
  3. 要忽略的属性的值应按照Mongo DB: naming restrictions文档中定义的有效集合和属性名称的规则命名。

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