问题描述
我有一个正在测试的方法,其中包含以下代码段:
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 循环中循环的数组列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)