Использование Mockito «когда» с параметрами, которые могут содержать определенные значения? - PullRequest
0 голосов
/ 02 марта 2019

Я новичок в 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, и именно это нужно проверить вместо наличия строки на верхнем уровне?

1 Ответ

0 голосов
/ 02 марта 2019

Вы можете использовать eq () matcher для совпадения с точной строкой:

when(myMock.lookup(eq("abc"), anyString(), anyString())
   .thenReturn(ImmutableList.of(...someItems))

when(myMock.lookup(eq("def"), anyString(), anyString())
   .thenReturn(ImmutableList.of(...otherItems))

Если вам нужно сопоставить только некоторую часть строки, вы можете использовать match () (передавая в него регулярное выражение):

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