【问题标题】:set property on grails.test.GrailsMock在 grails.test.GrailsMock 上设置属性
【发布时间】:2012-07-28 20:39:55
【问题描述】:

我似乎无法弄清楚如何在服务单元测试中设置模拟服务的属性。我尝试使用需求对象和 setProperty 方法,这似乎从 Grails 2 中消失了。

@TestFor(SomeService)
@Mock([HelperService])
class SomeServiceTests {

void testDoSomething() {
    def helperService = mockFor HelperService

    // tried this, error in method being tested
    helperService.setProperty('propToSet',['a','b'])
    // tried this, error in test
    helperService.demand.propToSet = ['a','b']
    // tried this, error in method being tested
    helperService.demand.getPropToSet() {['a','b']}

    service.helperService = helperService

    assert service.doSomething('aa') != null
}
}

对于大多数这些错误是No such property: propToSet for class: grails.test.GrailsMock,从我正在测试的需要它的方法中抛出。上面的第二个选项实际上给出了一个硬错误。如何在模拟的 Grails 对象中设置属性?

【问题讨论】:

    标签: spring unit-testing grails


    【解决方案1】:

    我对 Grails 模拟工具的体验也不是很好。所以我一直在使用 GMock 并对它感到满意。 GMock 与所有 Grails 测试配合良好,包括控制器、服务和域类以及 Spock 的规范。

    要使用它,您只需将以下行放入 grails-app/conf/BuildConfig.groovy:

    dependencies {
        test 'org.gmock:gmock:0.8.2'
    }
    

    这是你的代码的 GMock 版本。

    @WithGMock
    @TestFor(SomeService)
    class SomeServiceTests {
    
        void testDoSomething() {
            def helperService = mock(HelperService)
            helperService.propToSet.returns(['a', 'b'])    
            service.helperService = helperService
            play {
                assert service.doSomething('aa') != null
            }
        }
    
    }
    

    请注意,您的模拟代码只会对play { } 块产生影响。所以我们需要这个块来包裹断言语句。

    【讨论】:

    • 我必须检查一下,然后告诉你进展如何。
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 2010-12-05
    • 2013-02-28
    • 2011-07-24
    • 2021-06-17
    • 2018-05-18
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多