piątek, 2 grudnia 2011

Mockowanie konstruktorów

Gmock oferuje także bardzo przydatną funkcję mockowania konstruktorów. Jest to, co prawda pewnego rodzaju zły design, jeśli trzeba wykorzystać tą funkcjonalność, jednak jako że Groovy jest językiem dynamicznym i nie lubimy kodować niepotrzebnych fabryk, to taka funkcjonalność może być z powodzeniem wykorzystana. Dla przykładu podam kawałek kodu nad którym dzisiaj siedziałem. Musiałem skorzystać z generatora losowego, jednakże zależy mi w tym wypadku na wielowątkowości, więc musi być on tworzony dla każdego obiektu. Nie widzę sensu w tym przypadku, na tworzenie dodatkowej klasy fabryki dla typowego obiektu Java, więc zdecydowałem się na skorzystanie z mockowania konstruktora (kodu z wykorzystaniem generatora losowego z oczywistych względów nie można testować bez obiektów pozornych).
@Test
void shouldReturnDiscount2() {
  def mockRandom = mock(Random, constructor(anything()))
  mockRandom.nextInt(3).returns(2)
  play {returnValue = sut.getRandomActiveDiscount()}
}

I tak ten mały kawałek kodu mi to umożliwił. W tym przypadku mockuję konstruktor klasy Random, do którego przekazywany jest jakikolwiek parametr. Konstruktor ten zwróci mi obiekt mockRandom, na którym mogę wykonywać dalsze potrzebne mi operacje.

Brak komentarzy:

Prześlij komentarz