尝试比较具有单个私有字段的对象
这样的对象:
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
{
}.
Сan我得到了没有覆盖Equals
的肯定比较?
答案 0 :(得分:1)
由于您正在比较结构(FA将treated作为具有值语义的类型),FA将使用编译器生成的Equals
实现。在这种情况下,您的结构包含byte[]
数组的两个不同实例,因此它们将永远不匹配。此外,FA绝不会报告或访问私有字段的值。如果您决定将其设为私人,为什么会呢?而且您没有以任何合适的方式覆盖ToString
。
因此,完成这项工作的唯一方法是添加public
或internal
属性,或正确实现Equals
。