我如何单元测试使用插件中的方法的grails服务?

时间:2012-02-23 15:02:02

标签: unit-testing testing grails plugins

我有一个服务,它使用jms-grails插件提供的sendJMSMessage方法。 我想写一些单元测试,但我不确定如何“模拟”这个方法,所以它什么都不做。 有什么提示吗?

1 个答案:

答案 0 :(得分:2)

您可以对该方法进行metaClass,使其返回您想要的任何内容。

@Test
void pluginCode() {
    def myService = new MyService()
    def wasCalled = false
    myService.metaClass.sendJMSMessage = {String message ->
        //I like to have an assert in here to test what's being passed in so I can ensure wiring is correct
        wasCalled = true
        null //this is what the method will now return
    }

    def results = myService.myServiceMethodThatCallsPlugin()

    assert wasCalled
}

当我从metaClassed方法返回wasCalled时,我喜欢有一个null标志,因为我并不特别喜欢断言响应是null,因为它不是确保您正确连线。如果您在没有wasCalled标志的情况下返回了一些独特的东西。

在上面的示例中,我使用了1个String参数,但您可以metaClass输出任何数量/类型的参数以匹配实际发生的情况。