为了账号安全,请及时绑定邮箱和手机立即绑定

如何在mockito中模拟地图?

如何在mockito中模拟地图?

茅侃侃 2023-10-13 10:02:33
我有两张具有相同参数的地图。我想模拟其中一个来测试我的课程。但我不知道它不起作用的原因这是我的课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());    }    @Testpublic void testSomething() throws Exception {       a.doSomething("blabla");    }}
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

@InjectMocks尝试通过以下方式注入依赖项

  1. 首先使用构造函数。

  2. 然后是属性设置器。

  3. 然后现场注入。

#3 可能适合你。请尝试以下操作:

  • 将映射初始化从构造函数删除到其 setter 函数。

  • 将变量名称更改mapTestmap1测试类中的变量名称。

  • map2类似地定义。

  • 然后 InjectMocks 应该找到一个匹配的字段来注入。

分享更多代码部分以获得更准确的答案。


查看完整回答
反对 回复 2023-10-13
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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



查看完整回答
反对 回复 2023-10-13
?
慕村9548890

TA贡献1884条经验 获得超4个赞

您需要在两个类中具有相同的名称和相同的类型:


//main class

private  HashMap<String, Foo> map;


//test class

@Mock

private  HashMap<String, Foo> map;


查看完整回答
反对 回复 2023-10-13
  • 3 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信