gpt4 book ai didi

java - 如何在测试中模拟 CloseableIterator?

转载 作者:行者123 更新时间:2023-12-04 08:23:36 26 4
gpt4 key购买 nike

在我的实现中,我通过 ElasticsearchTemplate#stream() 从 ElasticSearch 获取数据返回 CloseableIterator<> .
我想通过执行以下操作来模拟此方法:

List<MyClass> foo = new ArrayList<>(); // and then I add some elements
when(mockTemplate.stream(any(SearchQuery.class), eq(MyClass.class))
.thenReturn(foo.iterator());
但是 iterator()返回 Iterator<MyClass>这不是 CloseableIterator<MyClass>而且我不知道如何转换它或找到解决方法。

最佳答案

org.springframework.data.util.CloseableIterator.CloseableIterator来自 Spring 和 java.util.Iterator来自 JDK 的接口(interface)足够接近:确实 CloseableIteratorIterator作为父接口(interface)。
这意味着您可以替换为 Iterator通过 CloseableIterator但不是相反:你需要什么。
虽然您不能返回 Iterator在您的模拟记录中,您仍然可以转换 IteratorCloseableIterator .由于方法委托(delegate),这并不是很难,但它仍然需要少量的样板。
例子 :

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.util.CloseableIterator;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;

@ExtendWith(MockitoExtension.class)
public class MockCloseableIteratorTest {

@Mock
ElasticsearchTemplate mockTemplateMock;

@Test
void foo() {
List<String> foo = new ArrayList<>();
// and then I add some elements
Mockito.when(mockTemplateMock.stream(any(SearchQuery.class), eq(String.class)))
.thenReturn(createCloseableIterator(foo.iterator()));

}

private <T> CloseableIterator<T> createCloseableIterator(Iterator<T> iterator) {
return new CloseableIterator<T>() {
@Override public void close() {
}

@Override public boolean hasNext() {
return iterator.hasNext();
}

@Override public T next() {
return iterator.next();
}
};
}
}

关于java - 如何在测试中模拟 CloseableIterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65380848/

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