2017-02-10 2 views
-1

У меня есть класс MyClass Java с перегруженного процесса метод:Как издеваются перегруженный метод Java с использованием Спок

class MyClass { 
    private String process(String requestId, String request) { 
     // Initial processing, creates processObject from request 
     // then class actual processing: 
     String temp = process (processObject); 
     // do stuff I want to test, generate response 
     return response; 
    }; 
    private String process(ProcessClass processObject) { 
     String result; 
     // do actual processing of processObject 
     return result; 
    } 
} 

Я хочу проверить метод первого процесса() с помощью Спока. Я пытаюсь использовать Шпион, чтобы высмеять перегруженный процесс (ProcessClass). Вот testProcess.groovy до сих пор:

class TestProcessUsingString extends Specification { 
    given: 
     def testInput = "TestInput" 
     def myObject = Spy(MyClass) { 
     process(_ as ProcessClass) >> "My result string" 
     } 
    when: 
     def response = myObject.process("TestInput") 
     // Check response 

Этот метод не работает для имитации процесса метода (ProcessClass ...), как я ожидал бы. Я консультировался с http://spockframework.org/spock/docs/1.0/interaction_based_testing.html, но я не могу понять это.

Как я могу издеваться над MyClass.process (ProcessClass), чтобы я мог вернуть поддельный ответ и передать его другой функции процесса?

+0

Почему бы не переместить материал, который вы хотите протестировать, в тестовый метод? –

ответ

0

Spock mocks, stub и spies основаны на динамических прокси Java или CGLIB. Те, которые в свою очередь создают подклассы, проверяют время выполнения, переопределяя все общедоступные методы и подключаясь к ним, чтобы предоставить вам модные функции, необходимые для макетирования. Однако вы используете частные методы, которые объясняют, почему это не работает. Кроме того, плохой практикой является проверка частных методов и использование шпионов, если это абсолютно необходимо. Что заставляет здесь использовать шпиона?

Смежные вопросы