Как вы издеваетесь над объектом, созданным внутри другого объекта в Groovy? - PullRequest
1 голос
/ 13 июля 2011

Вот мой пример кода

class CommandLine {

    def ls() {
        def cmd = "ls".execute()
        if(cmd.waitFor() != 0) {
            throw new Execution()
        }
        return cmd.text
    }
}

Переменная cmd содержит объект типа java.lang.Process.Как бы я сменил метод waitFor(), чтобы проверить выброшенное исключение?Если я не могу, можно ли как-нибудь переписать это, чтобы упростить автоматическое тестирование?

В общем, как вы высмеиваете объект, созданный в другом классе, или как вы структурируете свой код для тестирования

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Я не знаком с Groovy, но если есть возможность смоделировать метод String#execute(), чтобы вернуть смоделированный Process с методом waitFor(), который возвращает ненулевой результат, это был бы способ сделать это

Что-то вроде:

Process mockedProcess = MockingFramework.mock(Process.class); // MockingFramework can be Mockito
MockingFramework.when(String.execute()).thenReturn(mockedProcess);
MockingFramework.when(mockedProcess.waitFor).thenReturn(1);

new CommandLine().ls(); // Boom! => Execution exception
0 голосов
/ 19 августа 2011

Ответ заключается в использовании Groovy mocks вместо встроенных moils Grails.

import groovy.mock.interceptor.MockFor

class TestClass {

    def test() {
        def mock = new MockFor(classToBeMocked)

        mock.demand.methodToBeMocked(1..1) { -> /* code */ }

        mock.use {
            /*
            All calls to objects of type classToBeMocked will be 
            intercepted within this block of code.
            */
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...