gpt4 book ai didi

Grails 装置插件和功能测试重复数据

转载 作者:行者123 更新时间:2023-12-02 04:01:46 25 4
gpt4 key购买 nike

我在 BootStrap.groovy 中运行fixtureLoader.load 时遇到问题。

import grails.plugin.fixtures.FixtureLoader

class BootStrap {

def fixtureLoader

def init = { servletContext ->

environments {
test {

fixtureLoader.load {

build {
device1(Device, name: "device1")
device2(Device, name: "device2")
device3(Device, name: "device3")
}
}
}
}
}

def destroy = {
}
}

当 Grails 开始集成测试阶段时,就会执行加载。然后,当 Grails 开始功能测试阶段时,将再次执行加载,而不清除之前的执行。

这意味着:

如果我运行“测试应用程序功能:”或“测试应用程序集成:”一切都很好。如果我使用“test-app”运行,则会执行功能测试和集成测试。

这是功能测试阶段数据的 JSON 表示(使用“test-app”运行):

[[name:device3], [name:device2], [name:device1],[name:device3], [name:device2], [name:device1]]

这与功能测试阶段数据的 JSON 表示相同(使用“test-app Function:”运行)

[[name:device3], [name:device2], [name:device1]]

如何避免这种重复?

提前致谢

最佳答案

默认的测试数据库是一个非持久的内存中 hsqldb,它会在测试结束时被丢弃,但对其所做的更改将在测试阶段之间延续。此外,集成测试会在每次测试后回滚更改,但这不适用于 Bootstrap.groovy 中所做的数据库更改。

解决此问题的一个简单方法是在尝试创建灯具之前简单检查灯具是否存在。例如:

environments {
test {
if (Device.count() == 0) {
// build fixtures
}
}
}

另一种可能的解决方案是使用单独的数据库进行集成和功能测试。 http://www.redtoad.ca/ataylor/2011/02/setting-grails-functional-test-database/ 有一个如何执行此操作的示例。

关于Grails 装置插件和功能测试重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com