繁体   English   中英

如何在 mockito 中模拟 map?

[英]How to mock a map in mockito?

我有两张具有相同 arguments 的地图。 我想模拟其中一个来测试我的 class。 但我不知道它不起作用的原因

这是我的 class

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
    }

}

这是我的测试 class:

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

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

  1. 首先使用构造函数。
  2. 然后是属性设置器。
  3. 然后现场注入。

#3可能是你的方式。 尝试以下操作:

  • 从构造函数中删除 map 初始化到它们的设置器 function。
  • 在您的测试 class 中将变量名mapTest更改为map1
  • 也类似地定义map2
  • 然后 InjectMocks 应该找到一个匹配的字段来注入。

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

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

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

//main class
private  HashMap<String, Foo> map;

//test class
@Mock
private  HashMap<String, Foo> map;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM