devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
1 minut

Testowanie wystąpienia zdarzenia


24.11.2008

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
Notify of
nuwanda

Używam identycznego rozwiązania :)

Tom

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.

Procent

@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.

Moja książka

Facebook

Zobacz również