gpt4 book ai didi

java - 模拟返回带有捕获泛型的迭代器的方法

转载 作者:行者123 更新时间:2023-11-30 06:52:01 25 4
gpt4 key购买 nike

我正在使用第三方库,它具有以下形式的方法:

public interface ThirdPartyMessageThing<T> {
Iterator<? extends MessageEntry<T>> getMessages(){}
}

我正在尝试模拟对 getMessages() 的调用以返回模拟的迭代器,以便我可以控制 hasNext() 的行为和next()使用 Mockito。

我有一个被 mock 的ThirdPartyMessageThing<String>名为 thirdPartyMessageThing 的对象.

如果我尝试像这样模拟迭代器:

Iterator<MessageEntry<String>> mockedIterator = Mockito.mock(Iterator.class);

模拟似乎没问题,直到我尝试将其作为对when()的调用的模拟返回。在:

when(thirdPartyMessageThing.getMessages()).thenReturn(mockedIterator);

编译器不喜欢这样说它无法解析该方法。

如果我使用 IDE 的自动完成功能通过调用我尝试模拟的方法来生成局部变量,我会得到相同的行为:

Iterator<? extends MessageEntry<String>> mockedIterator =
thirdPartyMessageThing.getMessages();

并尝试将其用作 thenReturn() 的参数。但是,如果我只是输入 mock(Iterator.class)进入thenReturn()作为参数,编译器不会提示,但我无法访问迭代器来覆盖它的方法。

我怎样才能模拟这个迭代器,以便我可以将它用作模拟并覆盖它的方法?

最佳答案

我将其标记为 this question 的重复项因为我已经找到了让它发挥作用的方法。

为了引用,我最终做的是构造一个虚拟列表 <> 并返回它的迭代器。如果您使用 doReturn(returnValue).when(mockedObject).methodName() 语法,则此方法有效。

我也发现可行的另一种机制是将通用迭代器转换为普通迭代器,但这会引发有关未经检查的异常的警告。

关于java - 模拟返回带有捕获泛型的迭代器的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42561742/

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