如何在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());


       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");

    }

}


茅侃侃
浏览 136回答 3
3回答

泛舟湖上清波郎朗

@InjectMocks尝试通过以下方式注入依赖项首先使用构造函数。然后是属性设置器。然后现场注入。#3 可能适合你。请尝试以下操作:将映射初始化从构造函数删除到其 setter 函数。将变量名称更改mapTest为map1测试类中的变量名称。也map2类似地定义。然后 InjectMocks 应该找到一个匹配的字段来注入。分享更多代码部分以获得更准确的答案。

猛跑小猪

在开始模拟地图之前,是否有必要模拟地图?Mock 用于替换您不想参与单元测试的代码的其他部分。虽然 Map 很容易在单元测试中启动。

慕村9548890

您需要在两个类中具有相同的名称和相同的类型://main classprivate&nbsp; HashMap<String, Foo> map;//test class@Mockprivate&nbsp; HashMap<String, Foo> map;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java