fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
2 minut

Testowanie klas abstrakcyjnych przy pomocy mocków


03.09.2009

Generalnie moment, w którym natkniemy się na potrzebę przetestowania testami jednostkowymi klasy abstrakcyjnej powinien być momentem okrzyku: “refactoring czas zacząć!”. Takie coś teoretycznie nie powinno mieć miejsca; testuje się raczej funkcjonalność faktycznie wykorzystywaną w systemie, a więc bardziej klasy z niej dziedziczące. Odpowiednia hierarchia klas uzupełniona odpowiednią hierarchią testów jednostkowych rozwiązuje problem. Ale wiadomo – ideały sobie, a życie sobie.

Cóż więc zrobić, gdy mamy klasę abstrakcyjną wymagającą przetestowania? Na przykład taką:

Można specjalnie na potrzeby testu zaimplementować klasę dziedziczącą, utworzyć jej instancję i odpowiednią metodę wywołać. Ale możemy również skorzystać z mechanizmów RhinoMocks, którym efektem ubocznym jest taka konstrukcja:

CallAbstract to napisana przeze mnie extension method, poniżej jej implementacja. Przy okazji można przyjrzeć się doda:

  1:  public static class MockUtils
  2:  {
  3:  	public static void CallAbstract<T>(Action<T> operation, params object[] argumentsForConstructor) where T : class
  4:  	{
  5:  		var stub = MockRepository.GenerateStub<T>(argumentsForConstructor);
  6:  		stub.Stub(operation).CallOriginalMethod(OriginalCallOptions.NoExpectation);
  7:  		operation(stub);
  8:  	}
  9:  }

Zaznaczam jeszcze raz, że teoretycznie taka sytuacja nie powinna mieć miejsca. Ale jeśli już ma, to jest to całkiem niezłe jej rozwiązanie “na szybko”.

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

A nie lepiej skorzystać z PartialMock?
http://ayende.com/Wiki/(S(az3elprzof4y5j2clzmycn55))/Default.aspx?Page=Rhino+Mocks+Partial+Mocks&Code=1&AspxAutoDetectCookieSupport=1
Właśnie one umożliwiają testowanie jakiejś części klasy (włącznie z abstrakcyjnymi).

procent
procent
15 years ago

@Farol:
Czlowiek uczy sie cale zycie a i tak glupi umiera:). Dzieki za linka.

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również