Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动夹具相似性-仅比较匹配的特性_C#_Unit Testing_Autofixture - Fatal编程技术网

C# 自动夹具相似性-仅比较匹配的特性

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

我希望能够使用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);
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()中添加新属性,或者跟踪两个对象的属性名称更改以避免误报。谢谢你把我的注意力转向这个!