c# – AutoFixture Likeness – 仅比较匹配的属性

前端之家收集整理的这篇文章主要介绍了c# – AutoFixture Likeness – 仅比较匹配的属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够使用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)是完成匹配的决定性模板.这为断言提供了非常强烈的陈述:必须匹配此类的每个公共属性或字段.

但是,关于匹配属性交集的声明将是一个非常弱的语句,因为该交集可能是空的.这可能导致False Negatives.

即使您正在进行TDDing并且遵循红色/绿色/重构周期并且您已经看到单元测试未能通过这种假设的相似性交集,随后的重构可能会将这样的断言变为假否定,因为您删除了最后一个属性或字段这两个对象有共同点 – 你永远不会注意到.

但是,AutoFixture是开源的,所以欢迎您使用suggest this feature或发送拉取请求.

猜你在找的C#相关文章