Беглые утверждения должны (). BeEquivalentTo только с частным полем - PullRequest
2 голосов
/ 13 мая 2019

Попробуйте сравнить объекты с одним частным полем

Объект, подобный этому:

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?

1 Ответ

1 голос
/ 13 мая 2019

Поскольку вы сравниваете структуры, которые обрабатываются в FA как тип со семантикой значения, FA будет использовать сгенерированную компилятором реализацию Equals. В этом случае ваши структуры содержат два разных экземпляра массива byte[], поэтому они никогда не будут совпадать. Кроме того, FA никогда не будет сообщать или получать доступ к значениям приватных полей. С чего бы это, если вы решили, что это будет частным? И ты не переопределил ToString любым подходящим способом.

Таким образом, единственный способ выполнить эту работу - добавить свойство public или internal или правильно реализовать Equals.

...