一尘不染

Mockito:模拟将在for循环中循环的arraylist

java

我有一个包含以下代码段的受测试方法:

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),但我猜它从未使用过。


阅读 484

收藏
2020-12-03

共1个答案

一尘不染

您的问题是,在for-each循环中使用集合时,iterator()将调用其方法;而且您还没有使用该特定方法。

我强烈建议您传递一个真实的列表,而不是模拟列表,该列表中的元素只是您的模拟对象TracedPath,您可以根据需要进行多次。就像是

listOfPaths = Arrays.asList(mockTracedPath, mockTracedPath, mockTracedPath);
2020-12-03