Moq не выполняет функцию класса AddCustomer
. Таким образом, нет никакой возможности с вашей текущей настройкой Moq
, чтобы получить объект Confirmation
, что может быть реализована реальная реализация AddCustomer
.
Если вам нужна Confirmation
в качестве входных данных для другого теста, то его роль организовать части теста для создания входных параметров для метода при испытании.
Если подходить к этой проблеме, вызвав функцию AddCustomer
, то вы создаете связи кода создания Confirmation
и код, использующий подтверждение. Если код создания изменится, тесты могут прорваться в других областях, и было бы сложно и отнимать много времени, чтобы отладить причину.
Для тестов интеграции эта связь является правильным выбором, поскольку вы хотите протестировать это взаимодействие двух частей вашего программного обеспечения. Для модульных испытаний я рекомендую отключить функциональность AddCustomer
от других частей.
Другим подходом является создание объектов Confirmation
, которые могут быть созданы функцией AddCustomer
. Это может быть сделано вручную или для более сложных объектов с помощью некоторого подхода захвата/повтора (например, сериализация подходящего объекта Confirmation
из функции AddCustomer
в XML или JSON и создание объекта Confirmation
для макета в другом тесте путем анализа статического XML или JSON строка по десериализатору. Например
string capturedJson = "...."; // <= JSON of a Confirmation object
var confirmation = JsonConvert.DeserializeObject<Confirmation>(capturedJson);
_service
.Setup(x =>x.AddCustomer(It.IsAny<Customer>))
.Returns(confirmation);
target.SomeConfirmationObjectUsingFunction(_service);
Просьба уточнить вашу конкретную проблему или добавить дополнительные детали, чтобы выделить именно то, что вам нужно. Как это в настоящее время написано, что трудно точно сказать, что вы просите. Смотрите [Как Ask ] (http://stackoverflow.com/help/how-to-ask), чтобы помочь уточнить этот вопрос. – Nkosi