Проверьте статический метод вызова на Grails - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть какой-то статический метод:

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], _)
}

Но приведенный выше код не работает.Есть ли законный путь?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Правильный способ использования 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

0 голосов
/ 08 февраля 2019

Попробуйте что-то вроде:

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
}
...