fbpx
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”.

0 0 votes
Article Rating
3 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
nuwanda
15 years ago

Używam identycznego rozwiązania :)

Tom
Tom
15 years ago

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
15 years ago

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

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również