Piszę super prosty kod asynchroniczny. Po prostu zapisuję plik poza wątkiem.
Chciałbym przetestować ten kod przy użyciu struktury testów jednostkowych MSTest w Microsoft Visual Studio Team System 2008.
Jak mam to zrobic?
Chciałbym po prostu zablokować metodę testową do momentu jej powrotu. Mogę sobie wyobrazić kilka sposobów, aby to zrobić, ale jestem zszokowany, że nie ma wokół tego żadnych najlepszych praktyk ani zajęć pomocniczych.
Dużo widzę w przypadku Silverlight, ale nic ogólnego.
.net
unit-testing
Kevin Moore
źródło
źródło
Odpowiedzi:
W programie Visual Studio 2012 (wcześniej znanym jako „Visual Studio 11”) wprowadzono obsługę testów asynchronicznych . To wygląda tak:
[TestMethod] public async Task FooTest() { var result = await SomeAsyncOperation(); Assert.IsTrue(someCondition); }
Jak zauważył w komentarzach, typ zwracany jest ważne . Nie zadziała, jeśli zadeklarujesz metodę jako zwracającą .
Task
void
źródło
Task
typ zwrotu jest obowiązkowy -void
nie zadziała (przynajmniej nie w aktualizacji 4 VS2013)void
-powrotne metody asynchroniczne nie mogą być oczekiwane)Zamiast bezpośrednio wywoływać metody System.IO, spróbuj zamiast tego użyć biblioteki SystemWrapper . Następnie w testach możesz mockować wywołania, jak chcesz, zwracać cokolwiek zechcesz z powrotem do testu, w tym warunki błędów, i sprawdzić, czy Twoja logika działa zgodnie z oczekiwaniami.
Jeśli chcesz zobaczyć przykład, spójrz na ten wpis na blogu pokazujący, jak można go używać z RhinoMocks.
źródło