2014-09-26 1 views
24

Я пытаюсь создать макет для вызова. Скажи я это метод, который я пытаюсь гашу:Как написать совпадение, не равное чему-то

class ClassA { 
    public String getString(String a) { 
    return a + "hey"; 
    } 
} 

Я пытаюсь издеваться отъезде: первый экземпляр

when(classA.getString(eq("a")).thenReturn(...);` 

в том же тесте

when(classA.getString([anything that is not a])).thenReturn(somethingelse); 

Второй случай - мой вопрос: Как мне сопоставить anyString(), кроме "a"?

+0

Я думаю, вы могли бы отметить ответ, как принято. – troig

ответ

7

argThat Использование с Hamcrest:

when(classA.getString(argThat(CoreMatchers.not(CoreMatchers.equalTo("a")))... 

Вы могли бы также быть в состоянии сделать это с помощью упорядочивания. Если вы поместите один when(anyString) и when(eq("a")) в правильном порядке, Mockito должен проверить их в порядке и выполнить логику «а», когда это необходимо, а затем логику «anyString» в противном случае.

44

С Mockito рамкой, вы можете использовать AdditionalMatchers

ClassA classA = Mockito.mock(ClassA.class); 
Mockito.when(classA.getString(Matchers.eq("a"))).thenReturn("something"); 
Mockito.when(classA.getString(AdditionalMatchers.not(Matchers.eq("a")))).thenReturn("something else"); 

Надеются, что это помогает.

+0

Зачем голосовать? – troig

+7

Это должно быть принято как ответ. –

-2

я фактически принял этот подход после того, как внимательно смотрит на предложенных ответов:

doAnswer(new Answer<String>() { 
    public String answer(InvocationOnMock invocation) throws Throwable { 
    String originalParam = (String) invocation.getArguments()[0]; 
    return StringUtils.equalsIgnoreCase(originalParam, "a") ? "Something" : "Something Else"; 
    } 
}).when(classA).getString(anyString()); 

Это позволяет мне обрабатывать больше, чем просто два случаях путем корректировки возврата базы на Params.

+2

Это хорошее решение, но я думаю, что и мои, и @John B anwers ближе к вашим запросам OP. – troig

 Смежные вопросы

  • Нет связанных вопросов^_^