Gamlor Antwort war für mich, aber ich dachte, dass ich auf John Carpenters Kommentar erweitern würde, weil ich nach einer Lösung suchen, um mehr als einen Parameter beteiligt sind. Ich denke, dass andere Leute, die auf diese Seite stolpern, sich in einer ähnlichen Situation befinden. Ich habe diese Information in der Moq documentation gefunden.
Ich werde Gamlor's Beispiel verwenden, aber täuschen wir vor, dass die AsyncHandle-Methode zwei Argumente benötigt: ein string
und ein SomeResponse
Objekt.
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);
Grundsätzlich brauchen Sie nur eine weitere It.IsAny<>()
mit dem entsprechenden Typ hinzuzufügen, einen anderen Typ der Callback
Methode hinzufügen, und die Lambda-Ausdruck entsprechend zu ändern.
Meinten Sie "AsyncHandle" (extra "n")? Und könnten Sie den Code für Handler eingeben oder den vollständig qualifizierten Typnamen angeben, wenn es sich um einen Standardtyp handelt? – TrueWill
Kannst du deinen Skeletttest zeigen, um zu zeigen, was du denkst? Während ich weiß, dass es von Ihrer Seite her offensichtlich ist, sieht es von unserer Seite aus so aus, als hätte sich jemand die Zeit genommen, die Frage zu beantworten, ohne eine lange spekulative Antwort zu geben. –
Es gibt weder einen Foo noch einen Bar() noch irgendetwas ähnliches. Es ist nur ein Demo-Code, um die Situation zu zeigen, in der ich mich befinde, ohne mich von Anwendungsspezifikationen abzulenken. Und ich bekam nur die Antwort, ich hoffte zu bekommen. – Jan