Mockito:如何在when语句中传递特定的map作为参数



我想在when语句中传递一个特定的map作为参数。

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

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

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

@Before
public void setUp() {
  Map<String, String> = new HashMap<>();
  someSpecificMap.put("key", "value");
  when(mockedObject.get(someSpecificMap).thenReturn(1);
}

如果您传递的映射等于someSpecificMap,即具有一个元素"key":"value"的映射,则将返回模拟返回值1

如果你想检查地图是否有特定的密钥,那么我建议你使用Hamcrest hasEntry matcher:

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

这个mock设置为mockedObject.get的所有调用返回1,这些调用传递了一个带有键"key"的映射:"value",其他键可能存在也可能不存在。

相关内容

  • 没有找到相关文章

最新更新