流利的断言Should()。BeEquivalentTo仅具有私有字段

时间:2019-05-13 07:11:47

标签: c# unit-testing testing tdd fluent-assertions

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

这样的对象:

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的肯定比较?

1 个答案:

答案 0 :(得分:1)

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

因此,完成这项工作的唯一方法是添加publicinternal属性,或正确实现Equals