Mockito: mocking an arraylist that will be looped in a for loop(Mockito:模拟将在 for 循环中循环的数组列表)
问题描述
我有一个正在测试的方法,其中包含以下代码段:
I have a method under test that contains the following snippet:
private void buildChainCode(List<TracedPath> lines){
for(TracedPath path : lines){
/.../
}
}
我的单元测试代码如下所示:
My unit test code looks like this:
public class ChainCodeUnitTest extends TestCase {
private @Mock List<TracedPath> listOfPaths;
private @Mock TracedPath tracedPath;
protected void setUp() throws Exception {
super.setUp();
MockitoAnnotations.initMocks(this);
}
public void testGetCode() {
when(listOfPaths.get(anyInt())).thenReturn(tracedPath);
ChainCode cc = new ChainCode();
cc.getCode(listOfPaths);
/.../
}
}
问题是,在运行测试时,测试代码永远不会进入 for 循环.我应该在什么情况下指定条件,以便进入 for 循环?目前我已经指定了 when(listOfPaths.get(anyInt())).thenReturn(tracedPath)
,但我猜它从未使用过.
The problem is, that while running the test, the test code never enters the for loop. What when conditions should I specify, so that the for loop would be entered? Currently I have specified when(listOfPaths.get(anyInt())).thenReturn(tracedPath)
, but I guess it is never used.
推荐答案
你的问题是当你在for-each循环中使用一个集合时,它的iterator()
方法被调用了;而且您还没有使用该特定方法.
Your problem is that when you use a collection in a for-each loop, its iterator()
method gets called; and you haven't stubbed that particular method.
我强烈建议您不要模拟列表,而是传递一个真实的列表,其中的元素只是您模拟的 TracedPath
,任意多次.像
Instead of mocking the list, I strongly recommend you just pass a real list, where the elements are just your mocked TracedPath
, as many times as you want it. Something like
listOfPaths = Arrays.asList(mockTracedPath, mockTracedPath, mockTracedPath);
这篇关于Mockito:模拟将在 for 循环中循环的数组列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Mockito:模拟将在 for 循环中循环的数组列表


- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01