2 回答

TA贡献1860条经验 获得超8个赞
我正在尝试做一些非常类似的事情,以验证从withHandle测试中的模拟 JDBI 调用传递给另一个模拟的参数。
您在问题中给出的答案为我指明了正确的方向,但给了我错误消息:
The method then(Answer<?>) in the type OngoingStubbing<Object> is not applicable for the arguments ((<no type> invocationOnMock) -> {})
相反,我不得不使用新的org.mockito.stubbing.Answer传递给then,类似于您链接到的另一个问题。
在您的示例中,这将类似于:
when(JDBIMock.withHandle(any())).then(
//Answer<Void> lambda
new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
assertEquals(1, args.length);
//the interface def for the callback passed to JDBI
HandleCallback lambda = (HandleCallback) args[0];
when(mockHandle.attach(SomeDao.class)).thenReturn(mockDao);
//this actually invokes my lambda, which implements the JDBI interface, with a mock argument
lambda.withHandle(mockHandle);
//bingo!
verify(mockDao).findSomethingInDB(eq(args));
return null; // to match the Void type
}
}
)
在我的情况下,我期待一个结果列表,withHandle所以我不得不更改Answer类型,并返回类型answer以匹配并返回一个虚拟列表而不是Void. (在这个测试中返回的实际结果并不重要,只是将预期的参数传递给我随后的模拟对象)。
我还将verify调用移到了Answer测试的主体中,因此更清楚的是这是测试的预期,而不是模拟设置的一部分。
添加回答
举报