2016-03-22 11 views
1

私はgrails 2.3.6を使用していますが、MessageSourceを呼び出すサービスを呼び出すコントローラをテストしようとしています。私はこのポスト(How to unit or integration test use of injected messageSource for i18n in Grails 2.0 service)内のすべてのソリューションを試してみましたが、私はまだ、このエラーを取得しています:テストコントローラ(MessageSourceを呼び出すサービスを呼び出す)でのMessageSourceのインスタンス

org.springframework.context.NoSuchMessageException: No message found under code 'enrolment.state.approved' for locale 'es_ES'. 
    at es.portel.accessRequest.enyca.EnrolmentClientService.enrolmentTranslateState(EnrolmentClientService.groovy:30) 
    at es.portel.accessRequest.enyca.EnrolmentClientService.enromentsTranslateState_closure1(EnrolmentClientService.groovy:13) 
    at es.portel.accessRequest.enyca.EnrolmentClientService.enromentsTranslateState(EnrolmentClientService.groovy:12) 
    at es.portel.accessRequest.enyca.EnrolmentClientController.getAllEnrolments(EnrolmentClientController.groovy:41) 
    at es.portel.accessRequest.enyca.EnrolmentClientControllerSpec.test getAllEnrolments method(EnrolmentClientControllerSpec.groovy:34) 

これは私のテストコードです:

@TestFor(EnrolmentClientController) 
@Mock(EnrolmentClientService) 
class EnrolmentClientControllerSpec extends Specification{ 
    void "test getAllEnrolments method"() { 
     given: 
     MessageSource messageSource = getMessageSource() 
     controller.enrolmentClientService = new EnrolmentClientService() 
     controller.enrolmentClientService.messageSource = messageSource 
     Locale locale1 = new Locale("es_ES") 
     messageSource.addMessage('enrolment.state.approved',locale1, 'Aprobado') 

     when: 
     controller.getAllEnrolments() 

     then: 
     assertEquals response.status, HttpServletResponse.SC_OK 
     assertEquals response.format, 'json' 
     } 
    } 

任意のアイデア? ありがとうございます。

+0

あなたアールユニットテスト 'EnrolmentClientController'とあなたの' EnrolmentClientService'それはGrailsので嘲笑されているので、したがって、あなたが '新しいEnrolmentClientServiceを()'を使用することはできませんを嘲笑します。その行を削除しようとしてください – saw303

+0

それはまだ、同じエラーを取得、動作しません。とにかく、ありがとう。 – GSAN

答えて

1

いくつかの頭痛の後、私はついに解決しました。私はsaw303が私に言ったようにモック・サービスを外し、適切なセットアップをしました。これは、作業コードです:

@TestFor(EnrolmentClientController) 
class EnrolmentClientControllerSpec extends Specification { 
    @Shared 
    def messageSource = new StaticMessageSource() 

    def setupSpec() { 
     Locale locale1 = new Locale("es_ES") 
     messageSource.useCodeAsDefaultMessage = true 
     messageSource.addMessage "enrolment.state.approved", locale1, "Aprobado" 
    } 


    void "test getAllEnrolments method"() { 
     given: 
     controller.enrolmentClientService = new EnrolmentClientService() 
     controller.enrolmentClientService.messageSource = messageSource 

     when: 
     request.method = 'GET' 
     response.format = 'json' 
     controller.getAllEnrolments() 
    } 
} 
+0

喜んでこれはあなたのために働く。しかしあなたのユニットテストはあなたのユニットテストであるため、あなたのユニットテストはコントローラの動作だけをテストすべきです。理想的な場合には、コントローラのサービス依存関係が偽装されます。テストするシナリオは、統合テストを作成する方が適しています。その場合、メッセージソースを模擬する必要はなく、コントローラをサービスと統合してテストすることもできます。 – saw303

関連する問題