在JMockit文档中,说明了如何在考虑调用的相对顺序(VerificationsInOrder
)的情况下验证调用。但是,我找不到任何关于如何实现期望的事情。
上下文:我正在尝试测试一种将元素放入队列并按定义的顺序从队列中读取元素的方法。该方法可确保队列中同时只有n
个元素。
从我目前对JMockit的理解来看,它可能看起来像这样(对于n
= 2以及三个消息A,B和C):
// QueueHelper is a @Mocked class with static methods
new Expectations() {{
QueueHelper.send("Message A");
times = 1;
result = "CorrelationId A"
QueueHelper.send("Message B");
times = 1;
result = "CorrelationId B"
QueueHelper.receive("CorrelationId A");
times = 1;
result = "Response A"
QueueHelper.send("Message C");
times = 1;
result = "CorrelationId C"
QueueHelper.receive("CorrelationId B");
times = 1;
result = "Response B"
QueueHelper.receive("CorrelationId C");
times = 1;
result = "Response C"
}};
这将确保每个消息都已发送,并且每个响应均按任意顺序被准确地读取了一次。但是,在这种情况下,顺序是测试的主要目标(先发送A和B,然后在发送C之前先接收A,最后再接收B和C)。 还应该测试是否没有其他调用发生。
JMockit的实现方式是什么?