我有一些静态方法:
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], _)
}
但是上面的代码不起作用。有合法的方法吗?
答案 0 :(得分:0)
尝试类似的东西:
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
}
答案 1 :(得分:0)
正确的方法是使用GroovyMock
代替Mock
:
void "test sending message"() {
given:
String text = 'Test'
GroovyMock(global:true, WebUtils)
when:
service.sendMessage(text)
then:
1*WebUtils.httpPostRequest(_, [text: text], _)
}
我在这里找到了:http://spockframework.org/spock/docs/1.3-RC1/interaction_based_testing.html#_mocking_static_methods