У меня есть совсем другой метод вызова метода, который мне нужно протестировать с использованием платформы тестирования JMockit. Сначала давайте посмотрим на код.Мощный вызов метода с возвратом типа void с использованием JMockit или Mockito
public class MyClass{
MyPort port;
public registerMethod(){
Holder<String> status=null;
Holder<String> message=null;
//below method call is a call to a webservice in the real implementation using apache cxf framework. This method has a void return type. Read below for better explanation.
port.registerService("name", "country", "email", status, message);
// do some stuff with status and message here.....
HashMap response = new HashMap();
response.put(status);
response.put(message);
return response;
}
}
Теперь позвольте мне немного пояснить. Этот класс в основном имеет переменную экземпляра порта, которая используется для подключения к веб-сервису. Реализация webservice использует автоматически сгенерированные классы инфраструктуры apache cxf для подключения к веб-сервису и получения ответа. Моя задача - осуществить издевательство над этим вызовом webservice для написания тестовых кодов для многих похожих вызовов, которые есть в реальном приложении.
Проблема здесь: если вы заметили, что вызов веб-службы фактически производится методом port.registerService, посылая имя, страну и адрес электронной почты в качестве параметров. Теперь мы также передаем переменные статуса и сообщения как сами параметры этого метода. Таким образом, этот метод вместо того, чтобы возвращать некоторое значение для статуса и сообщения, имеет значение FILLS IN в этих двух переданных параметрах, которые сильно отличаются от подхода RETURN.
Теперь проблема в том, когда я пытаюсь издеваться над этим вызовом с помощью jmockit, я всегда могу издеваться над этим вызовом, но чего ожидать? поскольку возврата нет вообще, он оказывается недействительным, который заполняет значения в переданных параметрах. Таким образом, я всегда получаю статус, а message - как null, если я издеваюсь над этим вызовом, поскольку не могу выразить ожидаемое ожидание в реализации jmockit.
Пожалуйста, если у кого-нибудь есть какие-либо решения или предложения по вышеуказанной проблеме, ответьте и постарайтесь мне помочь. Благодарю.
Вы можете моделировать поведение издевались 'port.registerService (...) 'с результатом' result = new Delegate() {void delegate (...) {...}}; 'запись в ожидании. Это позволило бы тесту указать желаемые побочные эффекты. Но, не видя полного тестируемого метода, я не могу точно сказать, нужно ли это то, что вам нужно ... –
Проблема в том, что вызов метода только устанавливает значения в переменных в статусе и переменных сообщения без возврата что-нибудь. –
Да, но так что? Я не понимаю. Если метод высмеивается, не имеет значения, что делает его реализация. В любом случае ваш тест полностью контролирует поведение любых издевающихся методов. –