Testing Grails自定义标记库无法在集成测试期间使用自定义工件

Testing Grails自定义标记库无法在集成测试期间使用自定义工件,testing,grails,grails-plugin,taglib,grails-2.0,Testing,Grails,Grails Plugin,Taglib,Grails 2.0,我编写了一个插件,其中包含一个自定义标记库,它本身使用一个自定义的人工制品实例。当插件包含在应用程序中时,taglib完全按照预期工作。但是,我无法为它编写集成测试 假设自定义人工制品类型为“Foo”,人工制品处理程序类为FooArtefactHandler (简化的)FooTagLib类如下所示: class FooTagLib{ 静态名称空间=“bar” def eachFoo={attrs,body-> grailsApplication.fooClasses.each{foo-> out

我编写了一个插件,其中包含一个自定义标记库,它本身使用一个自定义的人工制品实例。当插件包含在应用程序中时,taglib完全按照预期工作。但是,我无法为它编写集成测试

假设自定义人工制品类型为“Foo”,人工制品处理程序类为
FooArtefactHandler

(简化的)
FooTagLib
类如下所示:

class FooTagLib{
静态名称空间=“bar”
def eachFoo={attrs,body->
grailsApplication.fooClasses.each{foo->

out如果这是一个集成测试,您不应该使用
@TestFor
,而是扩展
GroovyPagesTestCase
并声明grailsApplication:

class FooTagLibTests extends GroovyPagesTestCase {

    def grailsApplication

    void testEachFoo() {
        grailsApplication.registerArtefactHandler(new FooArtefactHandler())
        // Classes AFoo and BFoo are in the test/integration folder
        grailsApplication.addArtefact(FooArtefactHandler.TYPE, AFoo)
        grailsApplication.addArtefact(FooArtefactHandler.TYPE, BFoo)
        // just to check if artefacts are correctly loaded
        assert grailsApplication.fooClasses.length == 2

        assert applyTemplate("<bar:eachFoo>baz</bar:eachFoo>") == "bazbaz"
    }
}
类FooTagLibTests扩展了GroovyPagesTestCase{
def grailsApplication
void testEachFoo(){
registerArtefactHandler(新的FooArtefactHandler())
//类AFoo和BFoo位于测试/集成文件夹中
grailsApplication.addArtefact(FooArtefactHandler.TYPE,AFoo)
addArtefact(FooArtefactHandler.TYPE,BFoo)
//只是为了检查人工制品是否正确加载
断言grailsApplication.fooClasses.length==2
断言applyTemplate(“baz”)=“bazbaz”
}
}

这是因为TestFor annotation将模拟grailsApplication的实例(在单元测试中使用)。

如果这是一个集成测试,您不应该使用
@TestFor
,而是扩展
GroovyPagesTestCase
并声明grailsApplication:

class FooTagLibTests extends GroovyPagesTestCase {

    def grailsApplication

    void testEachFoo() {
        grailsApplication.registerArtefactHandler(new FooArtefactHandler())
        // Classes AFoo and BFoo are in the test/integration folder
        grailsApplication.addArtefact(FooArtefactHandler.TYPE, AFoo)
        grailsApplication.addArtefact(FooArtefactHandler.TYPE, BFoo)
        // just to check if artefacts are correctly loaded
        assert grailsApplication.fooClasses.length == 2

        assert applyTemplate("<bar:eachFoo>baz</bar:eachFoo>") == "bazbaz"
    }
}
类FooTagLibTests扩展了GroovyPagesTestCase{
def grailsApplication
void testEachFoo(){
registerArtefactHandler(新的FooArtefactHandler())
//类AFoo和BFoo位于测试/集成文件夹中
grailsApplication.addArtefact(FooArtefactHandler.TYPE,AFoo)
addArtefact(FooArtefactHandler.TYPE,BFoo)
//只是为了检查人工制品是否正确加载
断言grailsApplication.fooClasses.length==2
断言applyTemplate(“baz”)=“bazbaz”
}
}
这是因为TestFor注释将模拟grailsApplication的实例(用于单元测试)