我想测试一个“Adapter”对象,当它收到xml消息时, 它将其消化为Message对象,将消息ID + CorrelationID放在一起 使用时间戳并将其转发给Client对象。= 20 消息可以与先前的消息相关联(例如,m2.correlationID = 3D m1.ID)。
我模拟了客户端,并检查适配器是否成功调用 “client.forwardMessage(m)”两次,第一条消息为null correlationID,以及具有非null correlationID的第二个。
但是,我想精确测试相关ID是否已设置 正确地,通过抓取ID(例如m1.ID)。
但我无论如何都找不到。
关于添加功能有一个jira,但没有人评论过它 是未分配的。
这真的没有实现吗?
我读到了重新设计适配器以使用的替代方案 IdGenerator对象,我可以存根,但我认为会有太多 对象。= 20 难道你不认为它会增加不必要的复杂性来分割对象 细粒度?
谢谢,我感谢任何评论: - )
耶卜
答案 0 :(得分:1)
您可以使用匹配器(http://code.google.com/p/hamcrest)来检查是否获得了传递给方法的正确参数。请注意,您需要静态导入匹配器(在我的示例中为HasCorrelationId)。
下面的示例断言client.forwardMessage(m)使用null 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);
}
}
答案 1 :(得分:0)
我们已经努力简化在Hamcrest 1.2中编写匹配器的工作。有一个新的FeatureMatcher需要更少的工作。