繁体   English   中英

无法模拟Grails域类

[英]Cannot mock grails domain class

有人请解释为什么在使用新的MockFor(..)模拟时,域类的行为会有所不同? 我使用grails 2.4.1。 我已经创建了域类GTest:

class GTest {
    static constraints = {
    }

    String amethod() {
        return "GTest.amethod"
    }
}

和一个普通的类DTest:

class DTest {

    String amethod() {
        return "DTest.amethod"
    }
}

这是一个常规测试:

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
        }
    }
}

那么,这个问题是如何以编程方式模拟Domain类? 谢谢您的解释。

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

@grails.test.mixin.TestFor(MyDomainClass)
class MyDomainClassTest {
    // ...
}

有关更多详细信息,请参见http://grails.org/doc/latest/guide/testing.html#unitTestingDomains

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM