Здесь много хороших ответов! Идите с готовым набором функций Moq, пока вам не понадобится сделать утверждения о нескольких параметрах класса, передаваемых вашим зависимостям. Однако, если вы окажетесь в такой ситуации, функция Moq Verify с It.Is matchers не поможет изолировать неудачу теста, а способ захвата аргументов Returns / Callback добавляет ненужные строки кода в ваш тест (и долгие тесты мне не нужны).
Вот суть: https://gist.github.com/Jacob-McKay/8b8d41ebb9565f5fca23654fd944ac6b с расширением Moq (4.12), которое я написал и которое дает более декларативный способ делать утверждения об аргументах, передаваемых имитам, без вышеупомянутых недостатков. Вот как выглядит раздел Verify:
mockDependency
.CheckMethodWasCalledOnce(nameof(IExampleDependency.PersistThings))
.WithArg<InThing2>(inThing2 =>
{
Assert.Equal("Input Data with Important additional data", inThing2.Prop1);
Assert.Equal("I need a trim", inThing2.Prop2);
})
.AndArg<InThing3>(inThing3 =>
{
Assert.Equal("Important Default Value", inThing3.Prop1);
Assert.Equal("I NEED TO BE UPPER CASED", inThing3.Prop2);
});
Я был бы рад, если бы Moq предоставил функцию, которая выполняет то же самое, будучи в то же время декларативной и обеспечивая изоляцию ошибок, что делает это. Скрещенные пальцы!