我正在使用JDBI 3并编写了以下实用程序函数。
public class JdbiHelper {
// ...
public <T, DAO> T fetch(final Function<DAO, T> function, Class<DAO> daoClass) {
return dbi.withHandle(handle -> {
final DAO dao = handle.attach(daoClass);
try {
return function.apply(dao);
}
finally {
handle.close();
}
});
}
}
我可以用这样的方法调用
public Optional<Account> findByEmailAddress(final String emailAddress) {
if (!exists(emailAddress))
return Optional.empty();
return jdbiHelper.fetch(dao -> ofNullable(dao.selectByEmailAddress(emailAddress)), AccountDAO.class);
}
private boolean exists(final String emailAddress) {
return jdbiHelper.fetch(dao -> dao.count(emailAddress) > 0, AccountDAO.class);
}
我正在尝试使用Mockito 2为findByEmailAddress
模拟jdbiHelper
编写测试,但无法弄清楚如何模拟dao - &gt;方法的一部分。
我尝试过使用jdbiHelper.fetch(any(Function.class), eq(AccountDAO.class))
,但由于对返回的内容有两种不同的期望,因此无法尝试投射其中一种。
传入模拟函数会导致NPE,因为dao param为null。