草庐IT

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

coder 2023-10-30 原文

我正在使用 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...}) 允许用户定义在检查预期对象时应忽略的属性。

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

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

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

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

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

有关java - 将@ShouldMatchDataSet 与NoSQLUnit 一起使用时,有什么方法可以忽略某些字段吗?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  5. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  6. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  7. Ruby 方法() 方法 - 2

    我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby​​-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco

  8. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  9. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  10. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

随机推荐