Mockito издевается над одноименным методом с похожими подписями - PullRequest
0 голосов
/ 03 мая 2019

У меня есть класс, скажем SimpleClass, который имеет две функции с одинаковым именем и одинаковым количеством параметров, но с разными типами параметров. Теперь я предполагаю, что для имитации их возвращаемых значений следует использовать два оператора when с соответствующими сопоставлениями, но вместо этого при попытке получить следующую ошибку:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Обнаружено неуместное совпадение аргументов:

-> at mocks.MockTest.whenMethodsHaveS SimilarSignatures (MockTest.java:28) -> в mocks.MockTest.whenMethodsHaveS SimilarSignatures (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-Core v2.2.9

1 Ответ

0 голосов
/ 03 мая 2019

Вы не должны использовать 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();
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...