繁体   English   中英

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

[英]Mockito: how to pass specific map as argument in when statement?

我想在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;
        }
    }

但是不调用match()方法。 测试失败。

如果要检查.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匹配器:

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

对于通过键“ key”:“ value”传递给映射的mockedObject.get所有调用,此模拟设置返回1,可能存在其他键。

暂无
暂无

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

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