【问题标题】:Cannot mock grails domain class无法模拟 grails 域类
【发布时间】:2014-06-27 13:57:51
【问题描述】:

请解释一下为什么域类在使用 new MockFor(..) 模拟时表现不同? 我使用 grails 2.4.1。 我已经创建了域类 GTest:

class GTest {
    static constraints = {
    }

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

还有一个 groovy 类 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 类? 谢谢你的解释。

【问题讨论】:

    标签: unit-testing grails junit mocking


    【解决方案1】:

    你应该用grails.test.mixin.TestFor注释你的测试。

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

    更多详情请见http://grails.org/doc/latest/guide/testing.html#unitTestingDomains

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多