加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:16:02 所属栏目:百科 来源:网络整理
导读:我希望能够使用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 =
我希望能够使用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或发送拉取请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读