gpt4 book ai didi

c# - AutoFixture Likeness - 只比较匹配的属性

转载 作者:太空狗 更新时间:2023-10-29 20:17:54 25 4
gpt4 key购买 nike

我希望能够使用 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)是进行匹配的决定性模板。这为断言提供了一个非常的声明:必须匹配此类的每个公共(public)属性或字段。

但是,关于匹配属性交集的陈述将是一个非常的陈述,因为那个交集可能是空的。这可能导致 False Negatives .

即使您正在进行 TDD 并遵循红/绿/重构循环,并且您已经看到单元测试因这种假设的相似性交集而失败,后续的重构也可能会将这种断言变成假阴性,因为您删除了最后一个两个对象的共同属性或字段 - 您永远不会注意到。

但是,AutoFixture 是开源的,所以欢迎您访问 suggest this feature或发送拉取请求。

关于c# - AutoFixture Likeness - 只比较匹配的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com