【发布时间】:2016-12-15 06:33:48
【问题描述】:
前提条件
我有以下课程(虚构,仅用于演示问题):
public class MySingleton {
private static MySingleton sMySingleton;
private static List<String> sItemList;
private MySingleton(List<String> list) {
sItemList = list;
}
public static MySingleton getInstance(List<String> list) {
if (sMySingleton == null) {
sMySingleton = new MySingleton(list);
}
return sMySingleton;
}
public void addItem(String item) {
sItemList.add(item);
}
public void removeItem(String item) {
sItemList.remove(item);
}
}
以及相应的测试类:
public class MySingletonTest {
private MySingleton mInstance;
private List<String> mList;
@Before
public void setup() {
mList = mock(List.class);
mInstance = MySingleton.getInstance(mList);
}
@Test
public void testAddItem() throws Exception {
String item = "Add";
mInstance.addItem(item);
verify(mList, times(1)).add(item);
}
@Test
public void testRemoveItem() throws Exception {
String item = "Remove";
mInstance.removeItem(item);
verify(mList, times(1)).remove(item);
}
}
问题
如果我现在执行完整的测试类,Mockito 会告诉我测试testRemoveItem() 与模拟有 0 次交互。
这怎么可能?
注意:
请不要开始讨论感觉单例。
这个问题是关于 Mockito 以及为什么它不起作用。
【问题讨论】:
-
我从未使用过
mockito,但正如我在Unitests 中所知道的,每个@Test方法都是从头开始的。我认为您需要在testRemoveItem测试中删除它之前添加一项 -
即使我不添加项目,至少应该使用
verify调用和识别该方法
标签: java unit-testing singleton mockito