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提供了这样的功能。看到这个回复是不是这个春季项目?