Ist es möglich, einen Aufrufparameter einer Mocked-Methode zu ändern? Insbesondere möchte ich im folgenden Beispiel buffer
in ein bereits gefülltes Byte-Array ändern.Wie man einen Aufrufparameter einer verspotteten Methode mit Moq ändert?
Beispiel:
int MockedClass.Read(byte[] buffer, int offset, int count)
Erläuterung:
Aufruf Read
Lasten count
Bytes aus offset
in den mitgelieferten Byte-Array zu lesen buffer
.
Jetzt möchte ich Puffer gefüllt haben, nachdem der Anruf zu Read
in meinem Anwendungscode gemacht worden ist. Ist das möglich?
Wenn ja, wie würde ich über aufeinanderfolgende Anrufe zu Read
gehen? Ich möchte, dass aufeinander folgende Aufrufe jedes Mal, wenn möglich, einen anderen Puffer zurückgeben.
EDIT:
den Setup
Befehl wie folgt aus:
MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback((byte[] buffer, int offset, int count) => buffer[0] = 0xAA);
gibt mir ein seltsames Problem, wenn das Gerät Test ausführen: Sobald der Anruf zu Read
gemacht wird und der Delegierte Code (buffer[0] = 0xAA
) ausgeführt wird, zeigt der Debugger an, dass buffer
tatsächlich null
ist und die Ausführung des Komponententests nach Ausführung dieses Befehls stoppt. Ist meine Syntax geborken oder ist das ein Fehler?
Hallo Mark. Danke für die Antwort. Wenn ich dieses Muster verwende, wird mein Komponententest genau an dem Punkt im Callback enden, an dem der Delegat ausgeführt wird. Das Debuggen des Problems hat gezeigt, dass das Pufferbytearray "null" ist. Irgendwelche Ideen, warum das passieren könnte? –
Es ist null, wenn Sie es nicht zuweisen. Der obige Setup-Aufruf weist * die Puffervariable nicht zu - sie entspricht einer vorhandenen Variablen. In Ihrer Bearbeitung passen Sie auf It.IsAny() ', aber der Aufrufer muss immer noch den Wert liefern. –