C# 自动夹具相似性-仅比较匹配的特性
我希望能够使用AutoFixture.SemanticComparison比较以下两个对象的相似性:C# 自动夹具相似性-仅比较匹配的特性,c#,unit-testing,autofixture,C#,Unit Testing,Autofixture,我希望能够使用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().Of
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);
varo1=newobject1{a=1};
var o2=新对象2{a=1,b=2};
o1.生命的来源()应等于(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);
varo1=newobject1{a=1};
var o2=新对象2{a=1,b=2};
o1.AsSource()of likenness().Without(object2=>object2.b).ShouldEqual(o2);
然而,我发现这相当麻烦,因为每当我向Object2类添加一个新成员时,我都必须纠正我的单元测试(或者至少是单元测试助手)
有没有一种方法可以说“我只想比较两个对象中存在的子集的相似性”听起来你想根据两个对象属性的交集来比较它们。这目前不受相似性类的支持。理由是: 现在,目标类型(在上面的示例中是Object2)是完成匹配的决定性模板。这为断言提供了一个非常强大的语句:此类的每个公共属性或字段都必须匹配 但是,关于匹配属性交集的语句将是一个非常弱的语句,因为交集可能是空的。这可能导致严重后果 即使您正在进行TDing并遵循红/绿/重构周期,并且您已经看到单元测试在这种假设的相似性交叉点下失败,后续重构可能会将这种断言变成假阴性,因为您删除了两个对象的最后一个共有属性或字段,而且您永远不会注意到
但是,AutoFixture是开源的,因此欢迎您访问或发送请求。您描述的论点非常有力。这让我想到了更麻烦的事情——在Without()中添加新属性,或者跟踪两个对象的属性名称更改以避免误报。谢谢你把我的注意力转向这个!