Moq Rückruf mit out-parameter

Ich versuche, Moq, zu verhöhnen, einen Rückruf für die folgende Methodensignatur:

ResponseHeader AddIncentives(
        Hs_transRow[] data,
        out ResponseBody responseBody);

Ich möchte, dass meine callback zu verwenden die Daten, die übergeben wird. Allerdings bin ich in Probleme laufen, die ich denke, sind da der zweite parameter ist ein out-parameter. Ich kann das setup und die Daten zurückgeben, ohne Probleme, aber der Rückruf ist ein Problem.

Dies ist mein Aktuelles setup:

var addIncentiveResponseBody = new ResponseBody();

mockCoinsService
.Setup(service => service.AddIncentives(It.IsAny<Hs_transRow[]>(), out addIncentiveResponseBody))
.Callback((Hs_transRow[] data, ResponseBody body) =>
{
    //I want to use the data variable here
})
.Returns(() => new ResponseHeader
{
     action = ResponseHeaderAction.RESPONSE,
});

Wenn ich diesen code auszuführen, der als Teil einer unit-Tests, erhalte ich die Fehlermeldung:

Ungültig Rückruf. Setup-Methode auf mit den Parametern (Hs_transRow[],ResponseBody&) nicht aufrufen callback mit Parametern (Hs_transRow[],ResponseBody).

Kann ich sehen, es ist ein kaufmännisches und-Zeichen Unterschied, was ich davon ausgehen ist, da von diesem parameter sollte ein out-parameter. Allerdings, wenn ich das out-Schlüsselwort, um den Rückruf (und weisen Sie ihm einen Wert innerhalb der callback), bekomme ich die build-time-Fehler:

Delegaten "Action" nicht nehmen zwei Argumente.

Moq ist nicht in der Lage zu handhaben, ein callback für eine Methode, die einen out-parameter, oder mache ich etwas falsch?

[Edit] um Zu klären, ohne Zweifel, ich bin nicht zu Fragen, wie der Wert der out-parameter. Dies ist bereits getan, indem Sie die Zeile:

var addIncentiveResponseBody = new ResponseBody();
  • Diese Frage über die Zuweisung des Wertes von einem out-parameter. Ich bin schon in der Lage, um den Wert festzulegen. Meine Frage ist über die Verwendung der input-parameter in einem callback, wenn es auch ein out-parameter. Die Relevanz der out-parameter ist nicht so, dass ich versuche es, aber es hindert mich daran, mithilfe der data-variable im callback.
  • Hast du gelesen das Scott Wegner Antwort in dieser Frage?
  • Vielen Dank für die Kennzeichnung, die Antwort, ich werde sehen, ob es funktioniert, in meiner situation, und aktualisieren Sie diese Frage mit mehr Details, wenn nicht.
  • Um zu bestätigen, Scott Wegner Antwort funktioniert in diesem Szenario seine OutCallback überlastung hat den trick für mich.
InformationsquelleAutor Tim | 2016-03-16
Schreibe einen Kommentar