流利的断言Should()。Should()。BeEquivalentTo忽略排除的成员

时间:2018-11-29 12:55:53

标签: c# integration-testing fluent-assertions

我正在集成测试中创建两个相同类型的对象,但是试图排除在对象创建时生成的自动增量成员。

我成功排除了RecordId和Number属性,但是对Id属性的等效测试失败。 RecordId和number属性是从抽象类继承的,但Id的不同之处在于,它是从抽象类继承并随后被覆盖的抽象属性。

Id属性是一个抽象的字符串属性,并且是只读的。

//CreateJob creates indentical jobs, but with autoincremented id, number and recordid   
Job job1 = CreateJob();
Job job2 = CreateJob();

job1.Should().BeEquivalentTo(job2, config => config
   .Excluding(o => o.RecordId)
   .Excluding(o => o.Id)
   .Excluding(o => o.Number)
);
  

消息:预期成员ID为“ 45”,但“ 46”在“ 6”附近有所不同   (索引1)。

     

具有配置:   -使用声明的类型和成员

     
      
  • 按值比较枚举
  •   
  • 排除成员root.RecordId
  •   
  • 排除成员root.Id
  •   
  • 排除成员root.Number
  •   
  • 按名称匹配成员(或抛出)
  •   
  • 没有自动转换。
  •   
  • 请严格遵守字节数组中的项目顺序
  •   

我也尝试使用WithTracing()选项运行,但是它没有提供有关该属性的信息。

我已阅读文档,但未发现任何指示不能排除抽象或虚拟属性的信息,我错了吗?

我已经在5.5.0和5.5.3版本上尝试过,结果相同。

编辑:

我已经检查并再次检查了该类或其继承的类都不等于。

1 个答案:

答案 0 :(得分:0)

我看到了这一点,我的对象被audioPlay.PlayAudio覆盖了,但是我并不期望Equals(object obj)函数会被实现。

我认为BeEquivalentTo会通过对象图吗?