流利断言 Should().BeEquivalentTo 只有私有字段

Fluent Assertions Should().BeEquivalentTo with only private field

尝试比较具有单个私有字段的对象

像这样的对象:

public struct A
{
    private readonly byte[] bytes;

    public A(byte[] bytes)
    {
        this.bytes = bytes;
    }
}

这样比较:

var a = new A(new byte[] { 1, 2, 3 });
var b = new A(new byte[] { 1, 2, 3 });
a.Should().BeEquivalentTo(b);

结果:

Message: Expected a to be 

A
{
}, but found 

A
{
}.

我是否可以在没有覆盖的情况下获得正面比较 Equals

由于您正在比较结构,FA treated 将其作为具有值语义的类型,因此 FA 将使用 compiler-generated Equals 实现。在这种情况下,您的结构包含 byte[] 数组的两个不同实例,因此它们永远不会匹配。此外,FA 永远不会报告或访问私有字段的值。如果您决定将其保密,为什么会这样?而且您没有以任何合适的方式覆盖 ToString

因此,实现此功能的唯一方法是添加 publicinternal 属性,或者正确实施 Equals