Unit testing 无法模拟grails域类

Unit testing 无法模拟grails域类,unit-testing,grails,junit,mocking,Unit Testing,Grails,Junit,Mocking,有人,请解释为什么域类在被新的MockFor(..)模拟时表现不同? 我使用Grails2.4.1。 我已创建域类GTest: class GTest { static constraints = { } String amethod() { return "GTest.amethod" } } 以及groovy类DTest: class DTest { String amethod() { return "DTest

有人,请解释为什么域类在被新的MockFor(..)模拟时表现不同? 我使用Grails2.4.1。 我已创建域类GTest:

class GTest {
    static constraints = {
    }

    String amethod() {
        return "GTest.amethod"
    }
}
以及groovy类DTest:

class DTest {

    String amethod() {
        return "DTest.amethod"
    }
}
下面是一个groovy测试:

class GroovyJUnitTest {

    @Test
    void testDTestAmethod() {
        def mock = new MockFor(DTest)
        mock.demand.amethod {
            return "Mock DTest"
        }

        mock.use {
            def dtest = new DTest()
            // Here dtest.metaClass=groovy.mock.interceptor.MockProxyMetaClass@...
            def ret = dtest.amethod()
            // This assertation successes
            assertEquals "Mock DTest", ret
        }
    }

    @Test
    void testGTestAmethod() {
        def mock = new MockFor(GTest)
        mock.demand.amethod {
            return "Mock GTest"
        }

        mock.use {
            def gtest = new GTest()
            // Here dtest.metaClass=groovy.lang.ExpandoMetaClass@...
            def ret = gtest.amethod()
            // This assertation fails
            assertEquals "Mock GTest", ret
        }
    }
}
所以,这个问题是如何以编程方式模拟域类?
感谢您的解释。

您应该使用
grails.test.mixin.TestFor
注释您的测试

@grails.test.mixin.TestFor(MyDomainClass)
class MyDomainClassTest {
    // ...
}
有关更多详细信息,请参阅