【发布时间】:2014-06-29 08:23:47
【问题描述】:
我是 grails 新手。在我的 Web 应用程序中,我使用 spock 进行单元测试。
我使用可搜索插件来实现搜索功能。
在我的控制器中搜索方法定义为:
def search(SearchQueryCommand searchQueryCommand) {
def question
if (!searchQueryCommand.q?.trim() && !searchQueryCommand.tag?.trim() && !searchQueryCommand.name?.trim()) {
params.sort='sortableTitle'
params.order='desc'
question = Question.search(MessageStatusEnum.ACTIVE.getType().toString(), params)
}
render(view: "include_questionlist", model: [questionList: question.results, totalSize:question.total , max:params.max?:'Constants.PAGINATION_DEFAULT_MAX', pagination:true ,questionDescription:true])
}
在测试时我已经定义了
void "action search questions : search with blank search query" () {
setup:
controller.params.q=""
mockForConstraintsTests(Question)
mockDomain(User)
def question1 =new Question(title:'demo1', owner:new User(username:"Jini").save())
def question2 =new Question(title:'demo2', owner:new User(username:"Jini").save())
Question.search() >> [question1,question2]
when:
controller.search()
then:
view == '/question/include_questionlist'
}
但我不能模拟 Question.search() 方法。
错误信息接收为
Failure: action search questions : search with blank search query(com.orb.question.QuestionControllerSpec)
| groovy.lang.MissingMethodException: No signature of method: com.orb.question.Question.search() is applicable for argument types: (java.lang.String, org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap) values: [1992, [q:, sort:sortableTitle, order:desc]]
Possible solutions: each(groovy.lang.Closure), attach(), merge(), refresh(), save(), attach()
at org.grails.datastore.gorm.GormStaticApi.methodMissing(GormStaticApi.groovy:97)
at com.orb.question.QuestionController.search(QuestionController.groovy:115)
at com.orb.question.QuestionControllerSpec.action search questions : search with blank search query(QuestionControllerSpec.groovy:200)
| Completed 22 spock tests, 1 failed in 7480ms
请任何人帮助我解决此问题。
提前致谢。
【问题讨论】:
-
请任何人知道如何在测试用例中动态添加方法,请让我找到解决方案。
标签: unit-testing grails mocking