我正在创建两个相同类型的对象进行集成测试,但尝试排除在对象创建时生成的自动递增成员。
我成功地排除了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",但与"6"不同 (索引1)。
使用的配置如下: - 使用声明类型和成员
- 按值比较枚举
- 排除根记录号成员
- 排除根Id成员
- 排除根编号成员
- 通过名称匹配成员(或抛出异常)
- 不进行自动转换。
- 对字节数组中的项目顺序要求严格
我还尝试使用WithTracing()选项运行,但它没有提供有关有问题的属性的任何信息。
我已经阅读了文档,未发现任何表明无法排除抽象或虚属性的内容,我错了吗?
我已在版本5.5.0和5.5.3上尝试过,结果完全相同。
编辑:
我已经检查过两次,该类及其继承的类都没有覆盖equals方法。
Job
是否覆盖了Equals
方法? - Dennis Doomenpublic abstract class IndexObject { [NoCaseKeywordString] public virtual string Id { get; } }
- Gnus