Я хочу протестировать объект «Адаптер», который при получении XML-сообщения он переваривает его в объект сообщения, помещает идентификатор сообщения + идентификатор корреляции как с отметками времени и пересылает его объекту Client. = 20 Сообщение может быть коррелировано с предыдущим (например, m2.correlationID = 3D m1.ID).
Я издеваюсь над клиентом и проверяю, что адаптер успешно вызывает «client.forwardMessage (m)» дважды с первым сообщением с нулевым значением correlationID, а второй - с ненулевым correlationID.
Однако я хотел бы точно проверить, установлены ли идентификаторы correlationID. правильно, захватив идентификаторы (например, m1.ID).
Но я все равно не мог найти этого.
Есть Джира о добавлении функции, но никто не прокомментировал, и это не назначен.
Это действительно нереализовано?
Я читал об альтернативе перепроектирования адаптера для использования IdGenerator, который я могу заглушить, но думаю, что их будет слишком много объектов. = 20 Вам не кажется, что разделение объектов так мелкая детализация?
Спасибо, и я ценю любые комментарии :-)
Тайеб





Вы можете использовать сопоставитель (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, который требует меньше работы.