我是Mockito的新手,正在尝试弄清这种情况是否可能。
我正在尝试模拟一个类,该类有一个接受3个参数的方法,并且根据第一个参数是否包含一些子字符串,我返回了与Mock不同的东西。
有人可以帮我指出我可以使用的东西吗?我一直在挖掘Mockito,还没有运气。
例如,我正在尝试执行以下操作(伪代码):
when(myMock.lookup(anyStringThatContains("abc"), anyString(), anyString())
.thenReturn(ImmutableList.of(...someItems))
when(myMock.lookup(anyStringThatContains("def"), anyString(), anyString())
.thenReturn(ImmutableList.of(...otherItems))
另外:
如果我需要检查的字符串包含在参数传递的对象中,该怎么办?
即。如果第一个参数有一个字段line
,那又要检查而不是将字符串放在顶层怎么办?
答案 0 :(得分:1)
您可以使用eq() matcher来匹配确切的字符串:
when(myMock.lookup(eq("abc"), anyString(), anyString())
.thenReturn(ImmutableList.of(...someItems))
when(myMock.lookup(eq("def"), anyString(), anyString())
.thenReturn(ImmutableList.of(...otherItems))
如果只需要匹配字符串的一部分,则可以使用matches()(将正则表达式传递给它):
when(myMock.lookup(matches(".*abc.*"), anyString(), anyString())
.thenReturn(ImmutableList.of(...someItems))
when(myMock.lookup(matches(".*def.*"), anyString(), anyString())
.thenReturn(ImmutableList.of(...otherItems))
关于加法:如果您的字符串存储在变量中,则可以简单地使用字符串串联:
String str = "abc";
when(myMock.lookup(matches(".*" + str + ".*"), anyString(), anyString())
.thenReturn(ImmutableList.of(...someItems))
或(如果存储在对象的字段中)-像这样:
MyObject myObject = new MyObject();
myObject.setLine("abc");
when(myMock.lookup(matches(".*" + myObject.getLine() + ".*"), anyString(), anyString())
.thenReturn(ImmutableList.of(...someItems))