Testowanie wystąpienia zdarzenia

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

Opublikowane 24 listopada 08 07:25 przez Procent
Filed under: ,

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

# nuwanda said on listopada 24, 2008 20:58:

Używam identycznego rozwiązania :)

# Tom said on listopada 24, 2008 20:58:

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 said on listopada 25, 2008 08:21:

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

Co o tym myślisz?

(wymagane) 
(opcjonalne)
(wymagane) 

  
Wprowadź kod: (wymagane)

About Procent