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

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

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

最佳答案

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

@CustomComparisonStrategy(comparisonStrategy = MongoFlexibleComparisonStrategy.class)

public class SomeTests {

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

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

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

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

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

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

    关于java - 将 @ShouldMatchDataSet 与 NoSQLUnit 一起使用时,有什么方法可以忽略某些字段吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28149948/

    10-13 01:21