我想在map
语句中传递一个特定的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;
}
}
但是没有调用matches()方法。测试失败。
答案 0 :(得分:1)
如果要检查.equal
返回true的特定对象,则不需要使用参数匹配器,只需将其作为参数传递:
@Before
public void setUp() {
Map<String, String> = new HashMap<>();
someSpecificMap.put("key", "value");
when(mockedObject.get(someSpecificMap).thenReturn(1);
}
如果传递的地图等于someSpecificMap,即带有一个元素“key”的地图,则会返回模拟的返回值1:“value”
如果你想检查地图是否有特定的密钥,那么我建议你使用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);
}
此模拟设置为mockedObject.get
的所有调用返回1,该调用通过带有键“key”的地图传递:“value”,其他键可能存在或不存在。