我有一个包含以下代码段的受测试方法:
private void buildChainCode(List<TracedPath> lines){ for(TracedPath path : lines){ /.../ } }
我的单元测试代码如下所示:
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),但我猜它从未使用过。
when(listOfPaths.get(anyInt())).thenReturn(tracedPath)
您的问题是,在for-each循环中使用集合时,iterator()将调用其方法;而且您还没有使用该特定方法。
iterator()
我强烈建议您传递一个真实的列表,而不是模拟列表,该列表中的元素只是您的模拟对象TracedPath,您可以根据需要进行多次。就像是
TracedPath
listOfPaths = Arrays.asList(mockTracedPath, mockTracedPath, mockTracedPath);