Wie man eine Aufgabe verspottet & lt; & gt; Ergebnis?

Ich bin einrichten einige unit-tests und mit Rhino Mocks, die zum Auffüllen der Objekt getestet. Eines der Dinge verspottet, ist ein Task<HttpResponseMessage>da die Logik getestet, enthält einen Aufruf der HttpClient um eine asynchrone Antwort.

Also habe ich angefangen, die verhöhnt wie dieser:

var httpClient = MockRepository.GenerateMock<HttpClient>();
var taskFunc = MockRepository.GenerateMock<Func<HttpResponseMessage>>();
var responseTask = MockRepository.GenerateMock<Task<HttpResponseMessage>>(taskFunc);
var response = MockRepository.GenerateMock<HttpResponseMessage>();

httpClient.Stub(c => c.PostAsJsonAsync<IEnumerable<LogMessage>>(Arg<string>.Is.Anything, Arg<IEnumerable<LogMessage>>.Is.Anything)).Return(responseTask);
responseTask.Stub(t => t.Result).Return(response);
response.Stub(r => r.IsSuccessStatusCode).Return(true);

(Der "act" Schritt der test wird zu instanziieren Sie das Objekt, das geprüft wird, füttert man die httpClientund ausführen einer Methode auf. Der "assert" wird, stellen Sie sicher, über die spottet, dass die erwarteten Methodenaufrufe gemacht wurden, auf Ihnen.)

Durchlaufen diese in einem debugger, gibt es eine unbestimmte hängen auf dieser Linie:

responseTask.Stub(t => t.Result).Return(response);

Habe ich nicht viel Erfahrung mit Rhino Mocks oder mit C# async, so darf ich sein Blick auf etwas, das offensichtlich ist. Das Ziel ist natürlich, dass jeder Aufruf der .Result Eigentum zurückgeben würde, die response mock. Aber es sieht aus wie mein Versuch selbst ist vielleicht aufrufen .Result was ich erwarten würde, zu warten, auf unbestimmte Zeit, da es nur eine Attrappe, vielleicht?

Was ist der richtige Weg, um dies zu arrangieren? Im wesentlichen brauche ich, um meine Objekt mit einer verspottet HttpClient und behaupten, dass eine Methode aufgerufen wurde, die auf einem bestimmten argument.

InformationsquelleAutor der Frage David | 2014-05-01

Schreibe einen Kommentar