【发布时间】:2015-09-05 21:51:00
【问题描述】:
我有如下方法的接口
public interface IRemoteStore {
<T> Optional<T> get(String cacheName, String key, String ... rest);
}
实现该接口的类的实例称为remoteStore。
当我用 mockito 模拟这个并使用该方法时:
Mockito.when(remoteStore.get("a", "b")).thenReturn("lol");
我得到错误:
无法解析方法'thenReturn(java.lang.String)'
我认为这与 get 返回 Optional 类的实例有关,所以我尝试了这个:
Mockito.<Optional<String>>when(remoteStore.get("cache-name", "cache-key")).thenReturn
(Optional.of("lol"));
但是,我得到了这个错误:
当 Mockito 中的 (Optional '') 不能应用于 (Optional'')。
它唯一的工作是用这个:
String returnCacheValueString = "lol";
Optional<Object> returnCacheValue = Optional.of((Object) returnCacheValueString);
Mockito.<Optional<Object>>when(remotestore.get("cache-name", "cache-key")).thenReturn(returnCacheValue);
但上面返回一个可选的''的实例,而不是可选的'。
为什么我不能直接返回 Optional '' 的实例?如果可以,我应该怎么做?
【问题讨论】:
-
你不是在第一个代码块中缺少一个括号吗?
-
另外仅供参考,不要将
java.util.Optional与com.google.common.base.Optional混淆,因为后者需要在此处导入。