Java 如何在mockito中模拟地图?
我有两个具有相同参数的映射。我想模仿其中一个来测试我的课程。但我不知道它不起作用的原因 这是我的课Java 如何在mockito中模拟地图?,java,mockito,Java,Mockito,我有两个具有相同参数的映射。我想模仿其中一个来测试我的课程。但我不知道它不起作用的原因 这是我的课 public class A { private Map<String, Foo> map1; private Map<String, Foo> map2; public A() { this.map1 = new HashMap<String,Foo>(); map1.put("one",new Foo(
public class A {
private Map<String, Foo> map1;
private Map<String, Foo> map2;
public A() {
this.map1 = new HashMap<String,Foo>();
map1.put("one",new Foo());
this.map2 = new HashMap<String, Foo>();
map2.put("two", new Foo());
}
public void doSomenthing(String str){
Foo foo = map1.get(str)
//other actions
}
}
这是我的测试课:
public class ATest{
@InjectMocks
private A a;
@Mock
private HashMap<String, Foo> mapTest;
@Before
public void initialize() throws Exception {
when(mapTest.get(Mockito.anyString())).thenReturn(new Foo());
}
@Test
public void testSomething() throws Exception {
a.doSomething("blabla");
}
}
在你开始模拟地图之前,有必要模拟地图吗?Mock用于替换您不想参与单元测试的代码的其他部分。而Map很容易在单元测试中启动。两个类中需要相同的名称和类型:
//main class
private HashMap<String, Foo> map;
//test class
@Mock
private HashMap<String, Foo> map;
@InjectMocks尝试以下列方式注入依赖项
首先使用construtor。
然后是属性设置器。
然后进行现场注射。
3号可能是适合你的方式。请尝试以下操作:
删除从构造函数到其setter函数的映射初始化。
在测试类中将变量名mapTest更改为map1。
同样地定义map2。
然后InjectMock应该找到要注入的匹配字段。
共享代码的更多部分以获得更精确的答案。您试图模拟对象的内部状态。PowerMock提供了这样的功能。看到这个回复是不是这个春季项目?