0

我有一个基于 Grails 1.3.7 的应用程序。具体来说,我需要为基于内置 taglib 的自定义 taglib 编写单元测试<g:select />

我在之前的 SO 帖子中查看了解决方案,但所述解决方案在我的情况下不起作用(某些属性没有被正确模拟)。

我发现的另一个解决方案是this。使用这种方法,我得到了模拟的大部分属性,FormTagLib除了需要的grailsApplication属性select。我得到的实际错误是Cannot invoke method getArtefact() on null object.

在这种情况下如何正确编写单元测试?

编辑
这是我的测试类完整的堆栈跟踪。stacktrace 上的第 45 行是g.select从我的自定义 taglib 调用。我的自定义标签库类似于

def clientSpecificQueues = {attrs->
    def queueList = taskService.getClientSpecificQueues(session.clientName)
    def queueLabel = "Some String"


    if (queueList.size() > 0){
        out << queueLabel
    else
        out << g.select(name:'queueId', from: queueList, optionKey: 'id', optionValue: 'name')



}
4

1 回答 1

0

我相信grailsApplication永远不会被默认嘲笑,它有太多的责任。我会尝试通过做类似的事情grailsApplication来残酷地嘲笑setUp()

tagLib.grailsApplication = [getArtefact: { -> return something suitable }]
于 2012-12-04T22:48:58.253 回答