我有一个类,例如SimpleClass
,它具有两个具有相同名称和相同数量参数但具有不同参数类型的函数。现在,我假设模拟它们的返回值应该像使用两个带有适当匹配器的when
语句一样,但是当我尝试出现以下错误时,会出现以下错误:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 在此处检测到错误的参数匹配器:
->在嘲笑.MockTest.whenMethodsHaveSimilarSignatures(MockTest.java:28) ->在嘲笑.MockTest.whenMethodsHaveSimilarSignatures(MockTest.java:28)
以下是我正在尝试的示例:
public class SimpleClass {
public boolean doWork(String value, String name) {
return false;
}
public boolean doWork(Integer value, String name) {
return true;
}
}
@RunWith(MockitoJUnitRunner.class)
public class MockTest {
private SimpleClass thing;
@Before
public void setup() {
thing = new SimpleClass();
}
@Test
public void whenMethodsHaveSimilarSignatures() {
when(thing.doWork(anyString(), anyString())).thenReturn(true);
when(thing.doWork(any(Integer.class), anyString())).thenReturn(false);
assertThat(thing.doWork("one", "name")).isTrue();
assertThat(thing.doWork(1, "name")).isFalse();
}
}
虽然我不是Mockito的向导,但我已经使用了一段时间,从未遇到此问题。有什么想法吗?我正在使用Mockito-Core v2.2.9
答案 0 :(得分:0)
在对重载方法进行存根处理时,请勿使用any(Object.class)
,因为String
和Integer
都是Object
的子类,因此在存根处理期间指定特定的参数。您也可以使用ArgumentMatchers
when(thing.doWork(ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenReturn(true);
when(thing.doWork(ArgumentMatchers.any(Integer.class), anyString())).thenReturn(false);
您也不会嘲笑SimpleClass
@RunWith(MockitoJUnitRunner.class)
public class MockTest {
private SimpleClass thing = Mockito.mock(SimpleClass.Class);
@Before
public void setup() {
MockitoAnnotations.initMocks(this); // need to enable these annotations programmatically
}
@Test
public void whenMethodsHaveSimilarSignatures() {
when(thing.doWork(anyString(), anyString())).thenReturn(true);
when(thing.doWork(any(Integer.class), anyString())).thenReturn(false);
//or
when(thing.doWork(ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenReturn(true);
when(thing.doWork(ArgumentMatchers.any(Integer.class), anyString())).thenReturn(false);
assertThat(thing.doWork("one", "name")).isTrue();
assertThat(thing.doWork(1, "name")).isFalse();
}
}