У Спока случается исключение: слишком мало вызовов для: xxxx Несовпадающие вызовы (упорядочены по сходству)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 У Спока случается исключение: слишком мало вызовов для: xxxx Несовпадающие вызовы (упорядочены по сходству)

Сообщение Anonymous »

Я использую Spock для тестирования своего Java-кода. Подробно метод тестирования — это метод sendMessage MnsTemplate, а модульный тест находится в MnsTemplateTest, они находятся в коде ниже.
В этом модульном тесте Я издеваюсь над MNSClient、CloudQueue (возврат mnsClient.getQueueRef(queueName)) и ожидаю, что метод очереди.putMessage выполнится один раз, но в результате он не выполняется.
Вот исходный код Java код:

Код: Выделить всё

public class MnsTemplate {

private MNSClient mnsClient;

public MnsTemplate(MNSClient mnsClient) {
this.mnsClient = mnsClient;
}

public void sendMessage(String queueName, String messageBody) {
mnsClient.getQueueRef(queueName).putMessage(new Message(messageBody));
}
}
и другой связанный исходный код:

Код: Выделить всё

public interface MNSClient {
...
public CloudQueue getQueueRef(String queueName);
...
}

public final class CloudQueue {
...
public Message putMessage(Message message) throws ServiceException,
ClientException {
SendMessageAction action = new SendMessageAction(serviceClient,
credentials, endpoint);
SendMessageRequest request = new SendMessageRequest();
request.setMessage(message);
request.setRequestPath(queueURL);
return action.executeWithCustomHeaders(request, customHeaders);
}
...
}
Вот код модульного теста Spock:

Код: Выделить всё

import spock.lang.Specification
import static org.mockito.Mockito.*

class MnsTemplateTest extends Specification {

MNSClient mnsClient
CloudQueue queue

def setup() {
mnsClient = Mock(MNSClient)
queue = mock(CloudQueue.class)
}

def "sendMessage should send a message to the queue"() {
given:
def mnsTemplate = new MnsTemplate(mnsClient)
1 * mnsClient.getQueueRef("testQueue") >> queue

when:
mnsTemplate.sendMessage("testQueue", "Test Message")

then:
1 * queue.putMessage(new Message("Test Message"))
}
из-за того, что CloudQueue.java является конечным типом, поэтому для макетирования я используюockito-inline.
при выполнении модульного теста возникает ошибка:

Код: Выделить всё

Too few invocations for:

1 * queue.putMessage(new Message("Test Message"))   (0 invocations)

Unmatched invocations (ordered by similarity):

None

at org.spockframework.mock.runtime.InteractionScope.verifyInteractions(InteractionScope.java:110)
at org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:95)
at MnsTemplateTest.sendMessage should send a message to the queue(MnsTemplateTest.groovy:26)
как это исправить и сделать правильно.
jdk — 21, версия spock-core и spock-spring — 2.4-M4-groovy- 4.0

Подробнее здесь: https://stackoverflow.com/questions/791 ... ations-ord
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»