我有一些静态方法:

class WebUtils {
    static httpPostRequest(String url, Map data, Map headers) {
        //some code here
    }
}

和服务:
class ChatService {
    void sendMessage(String text) {
        //some preparing code
        WebUtils.httpPostRequest(url, data, headers)
    }
}


现在,我想通过单元测试检查服务中静态方法的调用。像这样:
void "test sending message"() {
    given:
        String text = 'Test'
        def mockedWebUtils = Mock(WebUtils)

    when:
        service.sendMessage(message)

    then:
        1*mockedWebUtils.httpPostRequest(_, [text: message], _)
}

但是上面的代码不起作用。有合法的方法吗?

最佳答案

尝试类似的方法:

void "test sending message"() {
    given:
        WebUtils.metaClass.static.httpPostRequest = { String url, Map data, Map headers ->
            return 'done' // you can do what you want here, just returning a string as example
        }
    when:
        service.sendMessage( 'Test' )
    then:
        1
        // test for something your method has done
}

10-04 17:45