Java Mockito:如何在when语句中将特定映射作为参数传递?

Java Mockito:如何在when语句中将特定映射作为参数传递?,java,mockito,Java,Mockito,我想在when语句中将特定的映射作为参数传递 Map<String, String> someSpecificMap = new HashMap<>; @Before public void setUp() { someSpecificMap.put("key", "value"); when(mockedObject.get(new MapParametersMatcher()).thenReturn(1); }

我想在
when
语句中将特定的
映射作为参数传递

Map<String, String> someSpecificMap = new HashMap<>;

@Before
    public void setUp() {


        someSpecificMap.put("key", "value");

        when(mockedObject.get(new MapParametersMatcher()).thenReturn(1);
    }

    @Test
    public void test() {
        //some code that invokes mocked object and passes into it map with ("key", "value")
    }



    class MapParametersMatcher extends ArgumentMatcher {

        @Override
        public boolean matches(Object argument) {

            if (argument instanceof Map) {
                Map<String, String> params = (Map<String, String>) argument;
                if (!params.get("key").equals("value")) {
                    return false;
                }

            }

            return true;
        }
    }
Map someSpecificMap=newhashmap;
@以前
公共作废设置(){
someSpecificMap.put(“键”、“值”);
当(mockedObject.get(newMapParametersMatcher())。然后返回(1);
}
@试验
公开无效测试(){
//调用模拟对象并传递到其中的一些代码映射为(“key”、“value”)
}
类MapParametersMatcher扩展ArgumentMatcher{
@凌驾
公共布尔匹配(对象参数){
if(参数instanceof Map){
Map params=(Map)参数;
如果(!params.get(“key”)等于(“value”)){
返回false;
}
}
返回true;
}
}

但是matches()方法未被调用。测试失败。

如果要检查
.equal
返回true的特定对象,不需要使用参数匹配器,只需将其作为参数传递即可:

@Before
public void setUp() {
  Map<String, String> = new HashMap<>();
  someSpecificMap.put("key", "value");
  when(mockedObject.get(someSpecificMap).thenReturn(1);
}
@之前
公共作废设置(){
Map=新的HashMap();
someSpecificMap.put(“键”、“值”);
when(mockedObject.get)(someSpecificMap.),然后返回(1);
}
如果您传递的映射等于someSpecificMap,即一个包含一个元素“key”:“value”的映射,则将返回模拟返回值1

如果您想检查地图是否有特定的键,那么我建议您使用Hamcrest hasEntry匹配器:

import static org.hamcrest.Matchers.hasEntry;
import static org.mockito.Matchers.argThat;
@Before
public void setUp() {
  when(mockedObject.get((Map<String, String>) argThat(hasEntry("key", "value"))))
      .thenReturn(1);
}
导入静态org.hamcrest.Matchers.hasEntry;
导入静态org.mockito.Matchers.argThat;
@以前
公共作废设置(){
当(mockedObject.get((Map)argThat(hasEntry(“key”,“value”))))
。然后返回(1);
}

此模拟设置为
mockedObject.get的所有调用返回1,该调用通过键“key”:“value”的映射,其他键可能存在或不存在。

检查“Fest断言”库;)