GORM钩子方法是否适用于Grails集成测试

时间:2013-12-12 13:10:37

标签: grails gorm integration-testing

我有简单的问题

集成测试期间,GORM挂钩方法( beforeUpdate afterLoad 等)是否正常工作?他们被评估了吗?

我有集成测试(我的测试类扩展了 GroovyTestCase ),我可以看到我在域对象上的 afterLoad 方法中所做的更改似乎不起作用(域对象在加载后保持不变),当我手动测试它(运行我的应用程序)时,它可以工作(域对象已成功更改)。此外,在集成测试期间,我无法从钩子方法中看到任何日志或打印到控制台。

这是预期的行为还是我遗失了什么?

这是一些代码: 我有PackageState域对象,其中包含字段accountID(整数)。 在PackageState中,我有 afterLoad hook:

def afterLoad() {
        this.accountID = 33333
    }

我的测试套件看起来像这样:

void "test3"() {
        PackageState packageState1 = PackageState.findByAccountID(11111)
        assertEquals(33333, packageState1.accountID)
    }

消息是: junit.framework.AssertionFailedError:expected:< 33333>但是:< 11111>

在我看来,没有调用钩子:/ ...

谢谢, 伊万

1 个答案:

答案 0 :(得分:3)

您可以通过withNewSession围绕动态方法(或任何其他GORM方法)集成测试这些事件挂钩:

class PackageStateSpec extends IntegrationSpec {
    PackageState packageState1

    void "test something"() {
        given:
            PackageState.withNewSession{
                packageState1 = PackageState.findByAccountID(11111)
            }

        expect:
            packageState1.accountID == 33333
    }
}

每次从集成测试进行测试时,事件都将在新会话中注册。