[Grails] Unit test on Grails

by 스뎅(thDeng) on

Grails에서 unit test를 하기 위해서는 @TestFor를 사용해서 테스트할 클래스를 지정하면 된다. 나머지는 spock test와 형식은 같다.

Grails에서 unit test의 테스트 파일 경로는 test/unit아래이다.

import grails.test.mixin.Mock
import grails.test.mixin.TestFor

@Mock([Food])
@TestFor(FoodService)
class FoodServiceSpec extends Specification {
  def "this is my test"() {
    when:
    def actual = service.foo()

    then:
    actual == bar
  }
}

@TestFor(FoodService) 어노테이션은 FoodService를 테스트하는 FoodServiceSpec테스트라는 의미이다. @TestFor로 서비스를 지정하면 자동으로 service라는 멤버로 해당 클래스를 테스트할 수 있고, 컨트롤러를 지정하면 controller라는 멤버를 사용할 수 있다. (이런 자동으로 생성되는 것들이 grails의 장정인 것 같은데, 모르면 못 쓰니 단점이 되기도 한다.)

@MockFoodService 안에서 GORM 등으로 해당 도메인 객체를 컨트롤하는 로직이 있는 경우 사용한다. 예를 들어, FoodService#foo() 메소드 안에 아래와 같이 .findByxx() 같은 로직이 있는 경우 사용하면 된다. @Mock을 사용하면 이런 메소드들을 자동으로 mocking해준다. 도메인에 메소드를 만들어주는 수준이고, 값을 리턴하는 형태까지 만들어주지는 않는다. (도메인 객체까지 mocking이 필요한 경우는 여기 참조)

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License