我希望能够使用 AutoFixture.SemanticComparison 比较以下两个对象的相似性:
public class Object1
{
public int a;
}
public class Object2
{
public int a;
public int b;
}
现在,当我这样做时:
var o1 = new Object1 { a = 1 };
var o2 = new Object2 { a = 1, b = 2};
o1.AsSource().OfLikeness<Object2>().ShouldEqual(o2);
我收到以下异常:“以下成员不匹配:- b。”
我发现我可以像这样省略“b”成员:
var o1 = new Object1 { a = 1 };
var o2 = new Object2 { a = 1, b = 2};
o1.AsSource().OfLikeness<Object2>().Without(object2 => object2.b).ShouldEqual(o2);
但是,我发现这相当麻烦,因为每当我向类 Object2 添加新成员时,我都必须纠正我的单元测试(或者至少是单元测试助手)。
有没有办法说“我想比较两个对象中存在的子集的相似性”?
听起来您想根据两个对象属性的“交集”来比较它们。 Likeness 类目前不支持此功能。理由是这样的: 现在,目标类型(在上面的示例中为 Object2)是完成匹配的决定性模板。这为断言提供了一个非常
strong的声明:此类的每个公共属性或字段都必须匹配。 但是,有关匹配属性交集的语句将是一个非常
弱的语句,因为该交集可能为空。这可能会导致漏报。 即使您正在进行 TDD 并遵循红/绿/重构循环,并且您已经看到单元测试因这种假设的相似性交集而失败,后续重构也可能会将此类断言变成假阴性,因为您删除了最后一个属性或这两个对象有一个共同点 - 你永远不会注意到。
但是,AutoFixture 是开源的,因此欢迎您
建议此功能