2017-09-08 8 views
1

내가 간단한 Grails의 서비스가 테스트IllegalStateException이는

class SearchServiceSpec extends Specification implements ServiceUnitTest<SearchService>{ 

    def setup() { 
    } 

    def cleanup() { 
    } 

    void "test something"() { 
     expect: 
     service.doSomething() == 10 
    } 
} 

내가 테스트를 실행하면, 다음과 같은 예외가 :

enter image description here

누구나 이것이 의미하는 것이 무엇인지 아시나요?

doSomethinggetSomething으로 변경 한 후 이상한 것이 작동하고 service.something을 수행합니다.

다음 버전이 있습니다. | Grails 버전 : 3.3.0 | 그루비 버전 : 2.4.11 | JVM 버전 : 1.8.0_60

+0

'get'메소드를 사용하는 것은 문서에있는 것과 정확히 같습니다. https://testing.grails.org/latest/guide/index.html#unitTestingServices 클래스에 @Mock() 주석을 추가하고 GORM을 연결하고 작동해야합니다. (Grails 3.3 이전). 3.3에서 어떻게 변경했는지 모르겠습니다. – bassmartin

답변

3

이것은 getter 메서드에 트랜잭션 동작이 적용되지 않았기 때문입니다. 트랜잭션 방식을 테스트하려면 GORM 구현 설정이 필요합니다. 테스트를 위해 가장 쉬운 방법은 grails.testing.gorm.DataTest을 구현하는 것입니다.

+1

'unit testing services'섹션의 공식 문서에이 내용이수록되어있는 것이 좋을 것입니다. 서비스는 기본적으로 트랜잭션 동작으로 생성되기 때문에 문서에 포함시키는 것이 중요합니다. – bassmartin

+0

그러면 PR에 문서를 제출하는 것이 좋습니다. –

+0

내 대답이 내 질문에 충분히 답을 한 경우 받아 들인 것으로 표시하십시오. –