Получить / сохранить параметры для ожидаемого вызова метода JMock?

Я хочу протестировать объект «Адаптер», который при получении XML-сообщения он переваривает его в объект сообщения, помещает идентификатор сообщения + идентификатор корреляции как с отметками времени и пересылает его объекту Client. = 20 Сообщение может быть коррелировано с предыдущим (например, m2.correlationID = 3D m1.ID).

Я издеваюсь над клиентом и проверяю, что адаптер успешно вызывает «client.forwardMessage (m)» дважды с первым сообщением с нулевым значением correlationID, а второй - с ненулевым correlationID.

Однако я хотел бы точно проверить, установлены ли идентификаторы correlationID. правильно, захватив идентификаторы (например, m1.ID).

Но я все равно не мог найти этого.

Есть Джира о добавлении функции, но никто не прокомментировал, и это не назначен.

Это действительно нереализовано?

Я читал об альтернативе перепроектирования адаптера для использования IdGenerator, который я могу заглушить, но думаю, что их будет слишком много объектов. = 20 Вам не кажется, что разделение объектов так мелкая детализация?

Спасибо, и я ценю любые комментарии :-)

Тайеб

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
913
2

Ответы 2

Вы можете использовать сопоставитель (http://code.google.com/p/hamcrest), чтобы проверить, получили ли вы правильные аргументы, переданные в ваш метод. Обратите внимание, что вам нужно будет статически импортировать свой сопоставитель (HasCorrelationId в моем примере).

В приведенном ниже примере утверждается, что client.forwardMessage (m) вызывается один раз с сообщением с нулевым correlationId и один раз с сообщением с correlationId = "abc".

import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;

public class HasCorrelationId extends TypeSafeMatcher<Message> {
    private final Object expectedCorrelationId;
    public HasCorrelationId(Object expectedCorrelationId) {
        this.expectedCorrelationId = expectedCorrelationId;
    }
    @Override
    public boolean matchesSafely(Message message) {
        if (expectedCorrelationId==message.getCorrelationId()) return true;
        return expectedCorrelationId==null? false: expectedCorrelationId.equals(message.getCorrelationId());

    }

    public void describeTo(Description description) {
        description.appendText("hasCorrelationId("+expectedCorrelationId+")");

    }

    public static HasCorrelationId hasCorrelationId(Object correlationId) {    
    return new HasCorrelationId(correlationId);
    }
}

... а теперь тест:

public class MyTest {
    private Mockery context = new Mockery();

  @Test
  public void testCorrelationId() {
    final Client client = context.mock(Client.class);
    final Message message1 = context.mock(Message.class,"message1");
    final Message message2 = context.mock(Message.class,"message2");

    context.checking(new Expectations(){{
        allowing(message1).getCorrelationId();will(returnValue(null));
        allowing(message2).getCorrelationId();will(returnValue("abc"));

        one(client).forwardMessage(with(hasCorrelationId(null)));
        one(client).forwardMessage(with(hasCorrelationId("abc")));
    }});

    client.forwardMessage(message1);
    client.forwardMessage(message2);
    }

}

Мы приложили некоторые усилия, чтобы упростить написание сопоставителей в Hamcrest 1.2. Есть новый FeatureMatcher, который требует меньше работы.

Другие вопросы по теме