我正在尝试使用EasyMock和TestNG编写一些单元测试,并遇到了一个问题.鉴于以下内容:
void execute(Foo f) {
Bar b = new Bar()
b.setId(123);
f.setBar(b);
}
我正在尝试以下列方式测试Bar的ID:
@Test
void test_execute() {
Foo f = EasyMock.createMock(Foo.class);
execute(f);
Bar b = ?; // not sure what to do here
f.setBar(b);
f.expectLastCall();
}
在我的测试中,我不能只调用f.getBar()并检查它的Id,因为f是一个模拟对象.有什么想法吗?这是我想要查看EasyMock v2.5添加和DelegateTo()和andStubDelegateTo()的地方吗?
哦,只是为了记录… EasyMock的文档打击.
解决方法:
啊哈!捕获是关键.
@Test
void test_execute() {
Foo f = EasyMock.createMock(Foo.class);
Capture<Bar> capture = new Capture<Bar>();
f.setBar(EasyMock.and(EasyMock.isA(Bar.class), EasyMock.capture(capture)));
execute(f);
Bar b = capture.getValue(); // same instance as that set inside execute()
Assert.assertEquals(b.getId(), ???);
}