[英]Grails bootstrap on integration tests
我试图将一些测试数据插入到我的数据库中,一个名为BootStrapTest的类可以完成这项工作。
在我的BootStrap.groovy
文件中,它就像这样调用
environments {
test {
println "Test environment"
println "Executing BootStrapTest"
new BootStrapTest().init()
println "Finished BootStrapTest"
}
}
但是,当我运行集成测试时,此代码不会执行。 我已经读过集成测试应该引导,所以我很困惑。
我看到了一些有创的解决方案,例如修改TestApp.groovy脚本 ,但我想可以通过conf实现这一目标。 也阅读这个问题和这个 问题 ,但并没有得到它。
也许我误解了一些东西,我在grails测试方面遇到了很多麻烦。 如果它给表带来任何东西,我使用Intelli JIdea作为IDE。
任何想法将不胜感激。
提前致谢
必须从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)都在bootstrap阶段运行。 请参阅http://www.grails.org/Bootstrap+Classes
从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")
}
在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"
}
这适用于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')
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.