ich eine Methode habe, dass ich spöttisch mache Netzwerk Anrufe während meiner Unit-Tests zu vermeiden, die etwa wie folgt aussieht:JMockit - Mock Antwort Input wird von JMockit lesen
InputStream sendRequestAndReturnResponseStream(String param1, Map<String, String> param2)
Ich habe verspottete sie in JMockit mit dem folgenden:
final InputStream byteStream = new ByteArrayInputStream("MyTestString".getBytes(StandardCharsets.UTF_8));
new NonStrictExpectations()
{
{
mockHttpClient.sendRequestAndReturnResponseStream(anyString, null);
result = byteStream;
}
};
Als ich den ByteArrayInputStream in meinem Test-Code zu erstellen, bevor ihm den NonStrictExpectation, sein interner po Feld auf 0 gesetzt zu geben, was ich erwarten würde, da es hasn t geschrieben worden. Wenn JMockit das Ergebnis von der Mocked-Methode zurückgibt, wird das Pos Feld innerhalb des Objekts auf die Größe des Streams festgelegt, so dass es scheint, dass das Array bereits gelesen wurde, vermutlich von etwas in JMockit.
Dies scheint ein seltsames Verhalten für den internen veränderbaren Zustand eines Objekts zu sein, das zwischen der Definition im Testcode und der Rückgabe an den aufrufenden Code durch JMockit geändert wird. Wird JMockit diesen InputStream tatsächlich lesen, bevor er es meinem Code gibt? Wenn ja, gibt es eine Möglichkeit, dieses Verhalten auszuschalten?