流利断言 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
。
因此,实现此功能的唯一方法是添加 public
或 internal
属性,或者正确实施 Equals
。
尝试比较具有单个私有字段的对象
像这样的对象:
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
。
因此,实现此功能的唯一方法是添加 public
或 internal
属性,或者正确实施 Equals
。