【发布时间】:2016-03-22 15:40:24
【问题描述】:
我正在使用 grails 2.3.6,我正在尝试测试一个控制器,该控制器调用一个调用 MessageSource 的服务。我已经尝试了这篇文章 (How to unit or integration test use of injected messageSource for i18n in Grails 2.0 service) 中的所有解决方案,但我仍然收到此错误:
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'
}
}
有什么想法吗? 提前致谢。
【问题讨论】:
-
您是单元测试
EnrolmentClientController并模拟您的EnrolmentClientService,因此您不能使用new EnrolmentClientService(),因为它被Grails 模拟。尝试删除该行 -
它不起作用,仍然得到同样的错误。无论如何,谢谢。