6

我试图将一些测试数据插入我的数据库,一个名为 BootStrapTest 的类可以完成这项工作。

在我的BootStrap.groovy文件中,它的名称是这样的

environments {
            test {
                println "Test environment"
                println "Executing BootStrapTest"
                new BootStrapTest().init()
                println "Finished BootStrapTest"
            }

        }

但是,当我运行集成测试时,此代码不会执行。我读过集成测试应该引导,所以我很困惑。

我看到了一些侵入性的解决方案,例如修改 TestApp.groovy 脚本,但我想通过 conf 可以实现这一点。还阅读了这个 SO questionthis one,但不太明白。

也许我误解了一些东西,我在进行 grails 测试时遇到了很多麻烦。如果它带来了任何东西,我使用 Intelli Jidea 作为 IDE。

任何想法将不胜感激。

提前致谢

4

4 回答 4

11

所有引导代码都必须从 Init 闭包中调用。所以这个版本应该可以工作:

import grails.util.Environment

class BootStrap {  
    def init = { servletContext ->
        // init app
        if (Environment.current == Environment.TEST) {
            println "Test environment"
            println "Executing BootStrapTest"
            new BootStrapTest().init()
            println "Finished BootStrapTest"

        }
    }

    def destroy = {
        // destroy app
    }

}

或者,您可以使用单独的引导文件来插入测试数据,而不是调用 BootStrapTest.init()。grails-app/conf 文件夹中名为*BootStrap.groovy 的任何类(例如TestBootStrap.groovy)都在引导阶段运行。见http://www.grails.org/Bootstrap+Classes

于 2010-11-03T08:47:02.957 回答
2

2.0 文档

每个环境引导

当您的应用程序基于每个环境启动时,通常需要运行代码。为此,您可以使用 grails-app/conf/BootStrap.groovy 文件对每个环境执行的支持:

def init = { ServletContext ctx ->
    environments {
        production {
            ctx.setAttribute("env", "prod")
        }
        development {
            ctx.setAttribute("env", "dev")
        }
    }
    ctx.setAttribute("foo", "bar")
}
于 2012-01-16T23:28:21.053 回答
0

在 BootStrap.groovy 你可以尝试这样的事情

if (!grails.util.GrailsUtil.environment.contains('test')) {
    log.info "In test env"
    println "Test environment"
    println "Executing BootStrapTest"
    new BootStrapTest().init()
    println "Finished BootStrapTest"
} else {
    log.info "not in test env"
}
于 2010-09-10T16:18:45.293 回答
0

这在 1.3.4 上对我有用:

    def init = { servletContext ->
        println 'bootstrap'
        switch (GrailsUtil.environment) {
            case "test":
            println 'test'
            Person p=new Person(name:'made in bootstrap')
            assert p.save();
            break
            }
    }
    def destroy = {
    }
}

此集成测试通过:

@Test
void testBootStrapDataGotLoaded() {
    assertNotNull Person.findByName('made in bootstrap')
}
于 2010-09-11T03:49:14.827 回答