risposta di Gamlor lavorato per me, ma ho pensato di ampliare il commento di John Carpenter, perché ero alla ricerca di una soluzione che comprenda più di un parametro. Ho pensato che le altre persone che si imbattessero in questa pagina potrebbero trovarsi in una situazione simile. Ho trovato queste informazioni nel Moq documentation.
Userò l'esempio di Gamlor, ma supponiamo che il metodo AsyncHandle utilizzi due argomenti: uno string
e un oggetto SomeResponse
.
var mock = new Mock<Handler>();
string stringResult = string.Empty;
SomeResponse someResponse = null;
mock.Setup(h => h.AsyncHandle(It.IsAny<string>(), It.IsAny<SomeResponse>()))
.Callback<string, SomeResponse>((s, r) =>
{
stringResult = s;
someResponse = r;
});
// do your test
new Foo(mock.Object).Bar(22);
Assert.AreEqual("expected string", stringResult);
Assert.IsNotNull(someResponse);
Fondamentalmente è solo bisogno di aggiungere un altro It.IsAny<>()
con il tipo appropriato, aggiungere un altro tipo al metodo Callback
, e cambiare l'espressione lambda a seconda dei casi.
Intendevi "AsyncHandle" (extra "n")? E potresti pubblicare il codice per Handler o specificare il nome di tipo completo se è di tipo standard? – TrueWill
Puoi mostrare il tuo test di scheletro per mostrare cosa stai pensando? Mentre apprezzo che dalla tua parte è ovvio, da parte nostra, sembra qualcuno che non ha avuto il tempo di rispondere alla domanda senza fare una lunga risposta speculativa. –
Non c'è né Foo né Bar() né nulla di simile. È solo un po 'di codice dimostrativo per mostrare la situazione in cui mi trovo senza distrarre dalle specifiche dell'applicativo. E ho ottenuto solo la risposta, speravo di ottenere. – Jan