I have a method under test that contains the following snippet:
private void buildChainCode(List lines){
for(TracedPath path : lines){
The Java For-Each loop used inside your buildChainCode
method isn't calling get()
, as you already figured out - it's using the iterator()
method defined in Collection<E>
, which List<E>
extends.
I really wouldn't recommend mocking the list. There's no advantage to it, unless you absolutely must check that the list was iterated through, and even then, it's better to assert on or verify the results of your class's behaviour given certain inputs.
Pass some implementation of List<E>
like LinkedList<E>
with tracedPath
in it.
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.
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);