В Verify
Moq по умолчанию проверяет равенство ссылок для аргументов, поэтому оно проходит только тогда, когда вы предоставляете одинаковые экземпляры (кроме случаев, когда вы переопределили Equals
) в ваших тестах и в вашей реализации.
В вашем случае expectedA.Value
просто возвращает new A { P1 = 1 }
, созданный в тесте, что, конечно, не тот же экземпляр, созданный в DoSomethingWith
.
Вам необходимо использовать It.Is
конструкцию Moq, чтобы правильно проверить это без переопределения Equals
(фактически для этого вам вообще не нужно автофиксирование):
barMock.Verify(m => m.Something(It.Is<A>(arg => arg.P1 == a.P1)));
Но если у вас есть несколько свойств, таких как P1, P2, P3 ... AutoFixture может быть полезным:
barMock.Verify(m => m.Something(It.Is<A>(arg => expectedA.Equals(a))));
Поскольку вам не нужно выписывать проверки eqaulity вручную для всех свойств.