使用Mockito 2模拟Java 8 lamba函数

时间:2017-07-27 08:17:43

标签: unit-testing lambda java-8 mockito

我正在使用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。

0 个答案:

没有答案