gpt4 book ai didi

java - 返回 Optional 的方法的 Mockito 错误

转载 作者:IT老高 更新时间:2023-10-28 20:40:33 26 4
gpt4 key购买 nike

我有如下方法的接口(interface)

public interface IRemoteStore {

<T> Optional<T> get(String cacheName, String key, String ... rest);

}

实现该接口(interface)的类的实例称为remoteStore。

当我用 mockito 模拟这个并使用该方法时:

Mockito.when(remoteStore.get("a", "b")).thenReturn("lol");

我得到错误:

Cannot resolved the method thenReturn(java.lang.String)

我认为这与 get 返回 Optional 类的实例有关,所以我尝试了这个:

Mockito.<Optional<String>>when(remoteStore.get("cache-name", "cache-key")).thenReturn
(Optional.of("lol"));

但是,我得到了这个错误:

when (Optional<String>) in Mockito cannot be applied to (Optional<Object>).

它唯一的工作是用这个:

String returnCacheValueString = "lol";
Optional<Object> returnCacheValue = Optional.of((Object) returnCacheValueString);
Mockito.<Optional<Object>>when(remotestore.get("cache-name", "cache-key")).thenReturn(returnCacheValue);

但上面返回 Optional<Object> 的实例而不是 Optional<String> .

为什么我不能只返回 Optional<String> 的实例直接地?如果可以,我该怎么做?

最佳答案

返回的 Mocks 期望返回类型与被模拟对象的返回类型匹配。

这是错误:

Mockito.when(remoteStore.get("a", "b")).thenReturn("lol");

"lol"不是 Optional<String> ,因此它不会接受它作为有效的返回值。

你这样做的原因

Optional<Object> returnCacheValue = Optional.of((Object) returnCacheValueString);
Mockito.<Optional<Object>>when(remotestore.get("cache-name", "cache-key")).thenReturn(returnCacheValue);

是由于 returnCacheValue成为 Optional .

这很容易解决:只需将其更改为 Optional.of("lol")而是。

Mockito.when(remoteStore.get("a", "b")).thenReturn(Optional.of("lol"));

您也可以取消类型见证。上面的结果将被推断为 Optional<String> .

关于java - 返回 Optional<T> 的方法的 Mockito 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com