poniedziałek, 5 grudnia 2011

Testowanie kontrolerów Grails 2.0

Grailsy 2.0 (wydano już wersję RC3, więc finalna już bardzo niedługo) wprowadzają nową jakość do testowania. Porzucono całkowicie ideę (i słusznie) rozszerzenia klas dziedziczących po GrailsUnitTestCase i zastosowano tzw. mechanizm Mixins. Jest to jedna z fajnych właściwości języka Groovy, umożliwiająca dodawanie metod do klasy w runtime, więcej o niej tutaj.

Przejdźmy jednak do meritum. Poniższy kod prezentuje klasę testową kontrolera.

@TestMixin(DomainClassUnitTestMixin)
@TestFor(IndexController)
class IndexTests {

  def position

  @Before
  void setUp() {
    mockDomain(BusinessType)
    new BusinessType(name: "otherType.name").save()
  }

  @Test
  void shouldReturnLocatedPosition() {
      assert controller.index().position == position
  }
}

Dla osób, które pisały w Grails w wersji 1.x niektóre elementy wydadzą się znajome, a mianowicie metody mockDomain oraz obiekt controller. Jednakże tutaj uzyskujemy je dzięki adnotacjom @TestMixin oraz @TestFor.

TestFor jest standardową adnotacją, gdy chcemy testować, któreś z elementów MVC w Grails 2.0. Automatycznie rozpozna on typ klasy (Controller, Domain...) oraz wstrzyknie odpowiednie metody. Dla testów kontrolerów są to między innymi obiekt controller oraz obiekt response. Więcej o nich jednak w dokumentacji.

Druga adnotacja @TestMixin służy do łączenia testów różnych elementów MVC. W podanym przykładzie jako argument podałem DomainClassUnitTestMixin, co umożliwia mi wykorzystanie metody mockDomain, która to działa analogicznie z metodą mockDomain w GrailsUnitTestCase znaną z wersji 1.x.

Gdy chcemy testować z użyciem klas Domain, możemy także posłużyć się adnotacją @Mock([BusinessType]), która to automatycznie wykona metodę mockDomain (w tym przypadku nie musimy już korzystać z @TestMixin).

Brak komentarzy:

Prześlij komentarz