gpt4 book ai didi

java - grails spock 测试失败,显示 'java.lang.IllegalArgumentException: ServletContext must not be null'

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:15 24 4
gpt4 key购买 nike

我在 command class 中有一个方法,它使用 messageSource.getMessage(...),因为 messageSource 不会被注入(inject)到 commandClass。我用

def messageSource = Holders.applicationContext.getBean("messageSource")commandClass 中。

我的问题是在尝试编写单元测试这个方法时,

@Before
void setup() {
Holders.applicationContext.getBean("messageSource")
}

void "testFunction"() {
//inside testFunction I am using messageSource
given:
//required things
when:
//call the function
then:
//assert
}

测试这个函数后,我得到了错误

java.lang.IllegalArgumentException: ServletContext 不能为空
在 grails.util.Holders.getApplicationContext(Holders.java:80)

有人可以建议如何解决这个问题。

更新

@Validateable
class commandClass {
//required fields and constraints
def formatData(List<commandClass> commandObjs) {
StringBuilder validationErrors
commandObjs.each {commandObj->
validationErrors = new StringBuilder()
if(commandObj.hasErrors()) {
commandObj.errors.allErrors.each {it ->
validationErrors.append(messageSource.getMessage(it, null)).append('\n')
}
}
commandObj.metaClass.validationErrors = validationErrors
}

}
}

提前致谢

最佳答案

我找到了答案

void setup() {
mockApplicationContext()
}

def static mockApplicationContext() {
GrailsUnitTestMixin.initGrailsApplication()
Holders.grailsApplication = GrailsUnitTestMixin.grailsApplication
Holders.metaClass.'static'.getApplicationContext = { ->
return GrailsUnitTestMixin.applicationContext
}
Holders.metaClass.applicationContext.getBean = { bean ->
return GrailsUnitTestMixin.messageSource
}
}

我稍后会更新更多关于答案

关于java - grails spock 测试失败,显示 'java.lang.IllegalArgumentException: ServletContext must not be null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26525296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com