2017-01-21 5 views
0

Что цель пользовательского Matcher и как мы можем сравнить сMatcher vs Object.equal?

Object.equal(). 

У меня есть проблема, что Object.equal() решить легко, передавая параметры when(), но какое-то время мне нужно использовать Matchers. Мне нужно знать, каково будет поведение и как оно будет выполнено.

Мой текущий код:

@Test 
public void myTest() { 
    when(service.foo(xyzService, new ARequest(1, "A"))).thenReturn(new AResponse(1, "passed")); 
    when(service.foo(xyzService, new ARequest(2, "2A"))).thenReturn(new AResponse(2, "passed")); 
    when(service.foo(xyzService, new BRequest(1, "B"))).thenReturn(new BResponse(112, "passed")); 

    c.execute(); 
} 

В настоящее время он работает нормально, но в моей реальной бизнес случае я не могу издеваться xyzService это переменная уровня метод. Я хочу использовать any() вместо xyzService. но в этом случае все брокеры.

+2

Показать код .. – nhouser9

+0

Возможный дубликат [В чем разница между Mockito Matchers isA, any, eq и тому же?] (Http://stackoverflow.com/questions/30890011/whats-the-difference-between- Mockito-matchers-иш-любые-э-и-же) –

ответ

2

С помощью when вы тренируете метод макета либо по фиксированным параметрам, либо по согласующим устройствам. Мы не можем смешиваться. Если вы хотите использовать any() Искатель для одного параметра, вы должны преобразовать другие из параметров в Сличитель тоже:

when(service.foo(any(), eq(new ARequest(1, "A")))).thenReturn(new AResponse(1, "passed")); 

Если это не работает для вашего теста, то либо equals РЕАЛИЗАЦИИ в ARequest является (т. е. ожидаемый вызов метода с любым сервисом, и этот запрос никогда не происходит в тестируемом коде)

1

. Сопрягатели обычно не нужны, кроме сложных структур объектов или если вы хотите основать равенство на различные критерии, то, что определили объекты, равные методу.

Пример равенства

Например, возьмем этот упрощенный пример (псевдо-код):

class test { 
    int x,y,z; 

    bool equals() { 
    return x == y && x == z && y == z 
    } 
// should override hashCode as well 

} 

Но в тесте вы заботились только о х и г соответствия можно написать Сличитель в выполните эту проверку. Для данного примера, очевидно, это не имеет смысла, потому что сравнение настолько базовое.

Сложных объекты

я создал общую matchers в прошлом, которые могут ползать весь граф объектов выполняющего поле путем сравнения поля. Они могут также использоваться для выполнения различных критериев соответствия, основанных на контексте. Я говорю может, потому что это обычно прерывает Single Responsibility Principle.

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

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