Testowanie wystąpienia zdarzenia

3

Podczas implementacji testów jednostkowych zachodzi czasami potrzeba napisania kodu weryfikującego zachowanie obiektów po wystąpieniu zdarzeń. Scenariusz taki jest wspierany przez tzw “mocking frameworks”. Za świetny przykład może służyć odświeżony w wersji 3.5 mechanizm biblioteki Rhino.Mocks ze swoją metodą rozszerzającą Raise.

Co jednak w sytuacji odwrotnej, gdy nie chcemy badać reakcji na zdarzenie, a jedynie upewnić się, że zostało ono wywołane? Sposób przedstawiony tutaj (“Test Event Was Raised”) nie bardzo mi się podoba. Wystarczyło jednak chwilę pomyśleć żeby strząchnąć zaciemnienie z ciemienia i napisać:

  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);

Mi to wygląda bardziej “kompaktowo”.

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.

3 Comments

  1. Mnie się podoba jednak bardziej ta wersja z Blah ;) W ogóle tak się zastanawiam jak ten kod by zadziałał, kiedy w obsłudze eventa by było np. przełączenie się na inny wątek i powrót i inne szaleństwa.

  2. @Tom:
    Obsługa zdarzenia zależy wyłącznie od ciebie podczas pisania testu. Zauważ, że tworzę instancję i podpinam pod nią delegata -> i tylko to zostanie wykonane po wywołaniu zdarzenia. Chodzi tu tylko o sprawdzenie czy dane zdarzenie zostało wywołane, więc ustawienie flagi jest tym czego potrzebujemy. Testowanie konkretnej obsługi zdarzenia to testy innego obiektu, który się pod owo zdarzenie podpina – czyli sytuacja odwrotna.