【问题标题】:Grails fixtures plugin and functional testing duplicates dataGrails 夹具插件和功能测试重复数据
【发布时间】:2011-09-19 16:06:58
【问题描述】:

我在 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 functional:”运行)

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

如何避免这种重复?

提前致谢

【问题讨论】:

    标签: grails duplicates integration-testing functional-testing fixtures


    【解决方案1】:

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

    解决此问题的一种简单方法是在尝试创建固定装置之前简单地检查它们的存在。例如:

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

    另一种可能的解决方案是使用单独的数据库进行集成和功能测试。在http://www.redtoad.ca/ataylor/2011/02/setting-grails-functional-test-database/有一个例子说明如何做到这一点

    【讨论】:

    • 非常感谢您的回复。这种解决方法可能对我有用:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多