spring - 在grails.test.GrailsMock上设置属性

标签 spring unit-testing grails

我似乎无法弄清楚如何在服务单元测试中为模拟服务设置属性。我试过使用需求对象和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对象中设置属性?

最佳答案

我对Grails的模拟工具也没有那么好的经验。所以我一直在使用GMock并对此感到满意。 GMock与所有Grails测试(包括 Controller ,服务和域类以及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 { }块中起作用。因此,我们需要用块来包装断言语句。

关于spring - 在grails.test.GrailsMock上设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704481/

相关文章:

java - Spring mvc从登录用户获取用户id

unit-testing - 使用 Moq 模拟返回值的存储库

grails - 如何注入(inject)与 grails 中的任何域类无关的自定义服务?

apache-flex - 将 Amazon S3 对象键的 String[] 转换为 TreeMap / HashMap 等

java - 添加第二个 '$or' 表达式失败

java - Hibernate,Spring框架和多对多

ruby-on-rails - 使用 RSpec 和 FactoryGirl 测试模型中的 Rails 类方法的正确方法是什么?

c# - 不支持 NUnit 异步设置?

tomcat - 无法在 Grails 中创建 404 页面

java - 如何从外部 Controller 运行 Controller 内的方法