Hac*_*Gil 13 java unit-testing for-loop mockito
我想测试一个使用Mockito对其进行增强的java方法.问题是,当我不知道如何设置增强的工作期望.以下代码来自mockito google组中未解决的问题:
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.mockito.Mockito;
import org.testng.annotations.Test;
public class ListTest
{
@Test
public void test()
{
List<String> mockList = Mockito.mock(List.class);
Iterator<String> mockIterator = Mockito.mock(Iterator.class);
when(mockList.iterator()).thenReturn(mockIter);
when(mockIter.hasNext()).thenReturn(true).thenReturn(false);
when(mockIter.next()).thenReturn("A");
boolean flag = false;
for(String s : mockList) {
flag = true;
}
assertTrue(flag);
}
}
Run Code Online (Sandbox Code Playgroud)
for循环中的代码永远不会被执行.设置迭代器的期望不起作用,因为java增强的内部不使用列表迭代器.设置List.get()
方法的期望也不是因为实现的增强似乎也没有调用get()
列表的方法.
任何帮助都感激不尽.
hoi*_*loi 25
嘲弄迭代器对我有用.见下面的代码示例:
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Collection;
import java.util.Iterator;
import org.junit.Before;
import org.junit.Test;
public class TestMockedIterator {
private Collection<String> fruits;
private Iterator<String> fruitIterator;
@SuppressWarnings("unchecked")
@Before
public void setUp() {
fruitIterator = mock(Iterator.class);
when(fruitIterator.hasNext()).thenReturn(true, true, true, false);
when(fruitIterator.next()).thenReturn("Apple")
.thenReturn("Banana").thenReturn("Pear");
fruits = mock(Collection.class);
when(fruits.iterator()).thenReturn(fruitIterator);
}
@Test
public void test() {
int iterations = 0;
for (String fruit : fruits) {
iterations++;
}
assertEquals(3, iterations);
}
}
Run Code Online (Sandbox Code Playgroud)
除非我遗漏了某些东西,否则你应该返回一个真实的模拟值列表.在这种情况下,在生成器方法中构造测试字符串列表并简单地返回它.在更复杂的情况下,您可以使用模拟对象替换列表的内容.
作为结束点,我无法想象为什么你真的需要模拟增强的for循环.单元测试的性质不适合该级别的检查.这是一个有趣的问题.
归档时间: |
|
查看次数: |
27490 次 |
最近记录: |