Zdarzenia w mock objects

0

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!

Tym samym wyrażasz zgodę na otrzymanie informacji marketingowych z devstyle.pl (doh...). Powered by ConvertKit
Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

Comments are closed.