fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
3 minut

Zdarzenia w mock objects


26.08.2009

Testowanie obsługi zdarzeń oraz faktu ich wywołania jest niekiedy równie ważne co przetestowanie każdej innej integracji pomiędzy dwoma obiektami. Scenariusz jest na tyle specyficzny, że poświęcę mu osobną notkę.

Wywoływanie zdarzeń

Zapomnijmy na razie o maglowanym przez ostatnie kilka wpisów kontrolerze i spójrzmy na inną sytuację. Wyobraźmy sobie, że mamy w systemie klasę odpowiedzialną za podpinanie się pod różne zdarzenia i logowanie ich w celach diagnostycznych. Jednym z takich zdarzeń może być niepoprawna próba uwierzytelnienia użytkownika, której sygnalizowanie wrzucimy do serwisu odpowiedzialnego dokładnie za tą czynność – uwierzytelnianie. Spójrzmy więc na zmodyfikowany interfejs IAuthenticationService:

Chcemy, aby w momencie wystąpienia tego zdarzenia zalogowana została odpowiednia informacja. Do logowania czegokolwiek zdefiniujemy interfejs ILogger:

Odpowiedzialność za obserwowanie zdarzenia oraz przekazywanie odpowiednich informacji do loggera spoczywać będzie na specjalnej klasie EventLogger. Jej implementacja nas nie interesuje; interesuje nas test, który spełnienie tego oczekiwania weryfikuje. Potrzebujemy więc mechanizmu, który pozwoli nam na wywołanie zdarzenia InvalidLoginAttempt na zamockowanej implementacji interfejsu IAuthenticationService.

Rhino Mocks posiada dwa sposoby na osiągnięcie tego celu. Pierwszy z nich jest stary i brzydki. Ale wszyscy będziemy kiedyś starzy i brzydcy, więc mimo to go zademonstruję:

Drugi sposób, dodany w wersji 3.5, to już cud, miód i orzeszki, zobaczcie sami:

Czyż nie fajne?

Testowanie wystąpienia zdarzenia

Tą kwestię poruszyłem już kiedyś wcześniej, ale dla zachowania ładu i składu wkleję kod odpowiedzialny za przetestowanie czy dane zdarzenie zostało wywołane:

  1:  var someClass = new SomeClass();
  2:  bool eventRaised = false;
  3:  someClass.TestEvent += delegate
  4:  {
  5:  	eventRaised = true;
  6:  };
  7:  
  8:  someClass.ShouldRaise();
  9:  Assert.IsTrue(eventRaised);

Zainteresowanych kilkoma zdaniami więcej na ten temat odsyłam do wspomnianego posta “Testowanie wystąpienia zdarzenia”.

Nie przegap kolejnych postów!

Dołącz do ponad 9000 programistów w devstyle newsletter!

Zapisując się na newsletter zgadzasz się na przetwarzanie Twoich danych osobowych w celu wysyłania na wskazany przez Ciebie adres e-mail informacji handlowych o nowościach, promocjach, produktach i usługach związanych z serwisem devstyle.pl. Będzie to marketing bezpośredni, do realizacji którego wykorzystam Twoje telekomunikacyjne urządzenia końcowe. Administratorem Twoich danych osobowych będzie Maciej Aniserowicz prowadzący działalność gospodarczą w Białymstoku (15-215) przy ul. Konopnickiej 14/8, NIP 5422824401. Przysługuje Tobie prawo do cofnięcia zgody, żądania wglądu do Twoich danych, wniesienia sprzeciwu co do ich przetwarzania, sprostowania, usunięcia i ograniczenia przetwarzania. Więcej informacji o tym jak przetwarzam Twoje dane znajdziesz na devstyle.pl/RODO. Powered by ConvertKit

Comments are closed.

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Facebook

Książka

Zobacz również