假设我有三种类型:TopHandler
、HandlerA
和HandlerB
。
它们每个都有一个 void handle(Something)
方法。
TopHandler
的实例包含对 HandlerA
和 HandlerB
实例的引用,并调用 handle()
在 HandlerA
和 HandlerB
上。
在我的测试中,我想模拟所有三个对象,然后验证对 topHandler 的调用是否会导致对其他两个对象的调用。
我该如何指定?我知道 EasyMock 允许我指定模拟的预期行为,但我不清楚要在此处使用哪些功能。
最佳答案
根据OP的描述,mock的主要接口(interface)是Handler
接口(interface):
public interface Handler {
void handle(String o);
}
所有三个模拟对象都应实现此接口(interface)并且 TopHandler 类是被测类:
public static class TopHandler implements Handler {
private Handler a;
private Handler b;
public TopHandler(Handler a, Handler b) {
this.a = a; this.b = b;
}
public void handle(String o) {
a.handle(o);
b.handle(o);
}
}
测试用例必须验证TopHandler
实现确实调用了a 和b 的handle()
方法:
@Test
public void testTopHandler() throws Exception {
Handler mockA = EasyMock.createMock(Handler.class);
mockA.handle("Test");
EasyMock.expectLastCall().once();
Handler mockB = EasyMock.createMock(Handler.class);
mockB.handle("Test");
EasyMock.expectLastCall().once();
TopHandler handler = new TopHandler(mockA, mockB);
EasyMock.replay(mockA, mockB);
handler.handle("Test");
EasyMock.verify(mockA, mockB);
}
关于java - 当所有节点都是模拟时,如何使用 EasyMock 测试 "tree of calls"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696974/