2011-10-25 7 views
5

Podczas pracy z Rhino.Mocks z obiektem próbnym w ręku:Jak mogę przejść test jednostki natychmiast po wywołaniu oczekiwanej metody na obiekcie próbnym?

Czy istnieje sposób na przejście testu jednostkowego po wywołaniu oczekiwanej metody bez wykonywania linii po wywołaniu tej oczekiwanej metody?

Dzięki

+0

Chcesz, aby próbka była w stanie zasygnalizować zakończenie testu? – rerun

+0

Tak; Powodem jest to, że jeśli nie "arrrange" kilka obiektów, które są dotknięte po wywołaniu tej metody, mam wyjątek. I nie uważam za istotne powiększanie mojego testu tylko po to, by zapobiec wyjątkowi, podczas gdy jestem przekonany, że test jest przekazywany przez wywołanie tej oczekiwanej metody. – pencilCake

+5

Myślę, że powinieneś raczej poprawić swój projekt, niż zaciemnić przebieg wykonywania testów. Nie znając więcej szczegółów, trudno jest określić, na czym polega problem, ale wydaje się, że masz metodę, która wykonuje więcej niż jedną rzecz (testowaną rzecz i coś, co chcesz pominąć), naruszając zasadę jednej odpowiedzialności. – hammar

Odpowiedz

2

Od RhinoMocks 3.5 można użyć piękny AssertWasCalled()

this.Service.BuldMessage("messageId"); 
this.Service.AssertWasCalled(x => x.GenerateMessage("messageId"), messageId)); 

EDIT: Odpowiedź na komentarz

Rhino Mock nie jest odpowiedzialna za zmianę przepływu wykonania testu, więc trzeba użyć NUnit twierdzi, metoda Assert.Pass() narzędzie pozwala natychmiast zakończyć test, rejestrując go jako udany:

if (this.Service.AssertWasCalled(...))) 
{ 
    Assert.Pass("well done"); 
} 

PS: jak inni sugerują, rozważyć redesing testu jednostkowego, który zmusił cię do takiego warunkowego zakończenia testu.

+0

Znam to. Ale mam na myśli: po wywołaniu, metoda wykonywania STOP, ponieważ test jest już zaliczony, tak jak się spodziewano. – pencilCake

+0

@pencilCake: Zaktualizowałem swoją odpowiedź – sll

2

Można użyć AssertWasCalled() w Rhino.Mocks

Twoje oczekiwanie, że test powinien zatrzymać jeśli metoda jest wywoływana i nie należy uruchamiać następujące wiersze oznacza, że ​​masz napisane testy źle. Miej dowód (Nunit lub inny) jako ostatnią linijkę testu i podziel test. Prawdopodobnie testujesz dwie rzeczy, a to nie jest testowanie jednostkowe. W testach nie ma takiego strumienia rozgałęzień. Wszystkie linie w testach powinny zostać wykonane. I najlepiej, każdy test powinien mieć tylko jedno twierdzenie.

Przy takim rodzaju przepływu, jak się spodziewamy, tracisz również informacje zwrotne z testów, gdy się nie powiedzie. Nie wiesz, po prostu patrząc na nazwę testu, co nie powiodło się.

Powiązane problemy