Unit testing 是否将参数获取/保存到预期的JMock方法调用?
我想测试一个“适配器”对象,当它接收到xml消息时, 它将其摘要化为一个消息对象,将消息ID+CorrelationID同时放入 带有时间戳并将其转发到客户端对象。=20 一条消息可以与前一条消息关联(例如m2.correlationID=3D m1.ID) 我模拟客户端,并检查适配器是否成功调用 “client.forwardMessage(m)”两次,第一条消息为null correlationID,以及具有非空correlationID的第二个 但是,我想精确地测试CorrelationID是否已设置 正确地,通过抓取ID(例如m1.ID) 但我无论如何也找不到这样做的方法 有一个关于添加该功能的消息,但是没有人评论它 是未分配的 这真的没有实现吗 我阅读了关于重新设计适配器以使用 IdGenerator对象,我可以存根,但我认为会有太多 对象=20 你不认为将对象拆分到so会增加不必要的复杂性吗 细粒度 谢谢,非常感谢您的评论:-) Tayeb可以使用matcher()检查是否将正确的参数传递到方法中。注意,您需要静态导入匹配器(在我的示例中为HasCorrelationId) 下面的示例断言,client.forwardMessage(m)被调用一次,调用的消息correlationId为null,调用一次的消息correlationId=“abc”Unit testing 是否将参数获取/保存到预期的JMock方法调用?,unit-testing,jmock,Unit Testing,Jmock,我想测试一个“适配器”对象,当它接收到xml消息时, 它将其摘要化为一个消息对象,将消息ID+CorrelationID同时放入 带有时间戳并将其转发到客户端对象。=20 一条消息可以与前一条消息关联(例如m2.correlationID=3D m1.ID) 我模拟客户端,并检查适配器是否成功调用 “client.forwardMessage(m)”两次,第一条消息为null correlationID,以及具有非空correlationID的第二个 但是,我想精确地测试CorrelationI
我们已经做了一些努力来简化Hamcrest 1.2中matchers的编写。有一个新的FeatureMatcher,它需要更少的工作
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);
}
}