Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试调用其他标记库的Grails标记库_Grails_Gsp_Taglib - Fatal编程技术网

测试调用其他标记库的Grails标记库

测试调用其他标记库的Grails标记库,grails,gsp,taglib,Grails,Gsp,Taglib,假设我有两个taglib,Foo为我的应用程序的特定部分做一些特定的事情,Util在整个过程中共享。我想这样做: class UtilTagLib { def utilTag = { attrs -> ... } } class FooTagLib { def fooTag = { ... out << g.utilTag(att1: "att1", att2: "att2") ...

假设我有两个taglib,Foo为我的应用程序的特定部分做一些特定的事情,Util在整个过程中共享。我想这样做:

class UtilTagLib {
    def utilTag = { attrs -> 
        ...
    }
}

class FooTagLib {
    def fooTag = {
        ...
        out << g.utilTag(att1: "att1", att2: "att2")
        ...
    }
}
把电话改成

out << util.utilTag(...)
但这让我很生气

groovy.lang.MissingPropertyException:没有这样的属性:util for class:org.example.FooTagLib

可能还需要注意:在日志中,我看到:

警告-缺少名为“groovyPagesUriService”的Bean


显然,UtilTagLib的创建和注射都不正确。如何修复此问题?

一种方法是重构行:

out << g.utilTag(att1: "att1", att2: "att2")

这样,您只在单元测试中测试FooTagLib的功能,而不依赖于UtilTagLib。

一种方法是重构线路:

out << g.utilTag(att1: "att1", att2: "att2")
这样,您只在单元测试中测试FooTagLib的功能,而不依赖于UtilTagLib。

解决方案:添加调用

mockTagLib UtilTagLib
到测试用例的设置或@Before方法。这是一个有点违反直觉的方法,它实例化了指定的标记库——真实的标记库,而不是模拟标记库——并将其连接到Grails应用程序上下文中。在本例中,它在内部用于设置测试中的实际taglib FooTagLib,但也可用于设置其他协作者标记库

请注意,这并不完美,因为它更像是一个集成测试,而不是一个纯粹的单元测试——理想情况下,我们将使用一个模拟的UtilTagLib,只测试交互。

解决方案:添加调用

mockTagLib UtilTagLib
到测试用例的设置或@Before方法。这是一个有点违反直觉的方法,它实例化了指定的标记库——真实的标记库,而不是模拟标记库——并将其连接到Grails应用程序上下文中。在本例中,它在内部用于设置测试中的实际taglib FooTagLib,但也可用于设置其他协作者标记库


请注意,这并不完美,因为它更像是一个集成测试,而不是一个纯粹的单元测试-理想情况下,我们将使用一个模拟的UtilTagLib,只测试交互。

我想,但重点是确保FooTagLib与UtilTagLib正确地互操作。我想,但关键是要确保FooTagLib与UtilTagLib正确互操作。