Muitas boas respostas aqui! Vá com o conjunto de recursos Moq pronto para uso até precisar fazer afirmações sobre vários parâmetros de classe passados para suas dependências. No entanto, se você acabar nessa situação, o recurso Moq Verify com It.Is não faz um bom trabalho em isolar a falha do teste, e a maneira de capturar retornos / retorno de chamada adiciona linhas de código desnecessárias ao seu teste (e testes longos não são para mim).
Aqui está uma síntese: https://gist.github.com/Jacob-McKay/8b8d41ebb9565f5fca23654fd944ac6b com uma extensão do Moq (4.12) que eu escrevi, que fornece uma maneira mais declarativa de fazer afirmações sobre argumentos passados para zombarias, sem os inconvenientes mencionados acima. Aqui está a aparência da seção Verificar agora:
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);
});
Eu ficaria feliz se o Moq fornecesse um recurso que realizasse a mesma coisa, sendo tão declarativo e fornecendo o isolamento de falhas que isso faz. Dedos cruzados!