当前位置: 首页 > 知识库问答 >
问题:

Mockito:无法解析方法“thenReturn(List)”

拓拔稳
2023-03-14

我不明白为什么这段带有Java泛型的代码无法编译。给定这个类:

public static class X {
    public List<? extends X> getList() {
        return null;
    }
}

无法模拟getList返回值:

X x = mock(X.class);
// Error: Cannot resolve method 'thenReturn(List<T>)'
when(x.getList()).thenReturn(Collections.singletonList(new X()));
// Error: Cannot resolve method 'thenReturn(List<capture of ? extends X>)'
when(x.getList()).thenReturn((List<? extends X>) Collections.singletonList(new X()));
// Error: Cannot resolve method 'thenReturn(List<capture of ?>)'
when(x.getList()).thenReturn((List<?>) Collections.singletonList(new X()));

使用“when…then”的唯一方法似乎是完全剥离泛型,代价是编译器警告:

when(x.getList()).thenReturn((List) Collections.singletonList(new X()));

最终,只有这样才能奏效:

doReturn(Collections.singletonList(new X())).when(x.getList());

共有1个答案

蔡鸿骞
2023-03-14

试试这个:

when(x.getList()).thenReturn(Collections.<? extends X>singletonList(new X()));
//                                       ^^^^^^^^^^^^^

通用方法<代码>

显式类型参数(在留档中称为类型见证)告诉Java,它的推断需要比其他情况下更慷慨,这将使您的集合与方法匹配。

这与Mockito没有任何关系,除了doReturn方法工作之外,因为Mockito无法在doReturn语法中检查返回类型。

 类似资料:
  • 我是Scala的新手。我正在编写以下代码,其中一个APIendpoint在文件中缓存值(某某JsonData.toString()),另一个endpoint从该文件中检索(Json.parse())。使用wh-thenEnter编写测试时,会出现重载方法错误。 我哪里做错了? 缓存文件内容: 缓存ontroller.scala CacheControlllerTest.scala

  • 你好,我写和销售机票的后端服务,我试图为这个api编写测试。当我试图为AirlineCompanyController类编写createAirlineCompany测试时,我得到了这个错误。 我的测试班: 还有我的航空公司服务舱: 我的航空公司Imp课程: 我得到的错误是来自then返回()方法,我不知道如何解决这个问题。谢谢大家。

  • 我正在通过Android Studio中的一个应用程序工作,该应用程序使用学校意图传递数据。我已经创建了传递数据的对象,并启动了,但是我不断收到一个警告,说我的方法无法解析。有什么想法吗?提前谢了。

  • 正如文件所述: Android O允许您通过在res/字体/文件夹中添加字体文件来捆绑字体作为资源。 结果: 您可以使用getFont(int)方法检索字体,其中需要传递要检索的字体的资源标识符。此方法返回Typeface对象。这将对字体的第一个重量或样式变体(如果是字体系列)进行编码。然后可以使用字体。create(typeface,style)方法来检索特定样式。 注意:TextView已经为

  • > 在菜单项和添加导航头之间导航的代码由一个方法组成。 由于作者没有提到在哪里粘贴这段代码,我粘贴在我的文件中 在菜单项之间导航和添加导航标题之间的代码是否由我粘贴在正确的位置? 在方法selectDrawerItem(MenuItem MenuItem)中有一条注释,创建一个新片段,并根据位置指定要显示的行星,作者是否希望我在这里添加一些内容。

  • 我正在尝试构建一个java。net应用程序,其中客户端和服务器必须通过串行收集类型(如字节[])相互发送数据。 由于未知原因,我的DataInputStream无法解析方法readAllBytes()。 一个朋友把它扔进了IDE,它没有抱怨。我不确定这怎么会是一个版本问题,但我检查了一下,并没有误解我的项目。我正在使用Java 8。 实际上,我确信应该支持这个方法,但我不明白为什么不支持,因为它是