2016-05-13 2 views
0

Я использую Mockito для модульного тестирования. И есть много таких матчи, как anyString(), anyBoolean() в Мокито. Но предположим, что если у меня есть обычай enum какКак создать пользовательские шаблоны в Mockito?

Enum LoginType.java

//LoginType.java 
public enum LoginType { 
    FACEBOOK, 
    EMAIL, 
    GOOGLE 
} 

В одном из аргументов метода мне нужно передать экземпляр LoginType. Как передать аргумент без явного пропуска LoginType.FACEBOOK или LoginType.GOOGLE. Что-то вроде anyString(). Любой намек в этом направлении будет полезен.

ответ

1

Поведение any, просто вызов Matchers.any() может быть достаточно хорошим на Java 8. Именно тогда вышла парадигма типа параметра.

Вы также можете выбрать Matchers.any(LoginType.class), который имеет чистое поведение any() в Mockito 1.x, но будет обеспечивать проверку типов в Mockito 2.0 и выше. В любом случае передача в литературе класса поможет Java получить информацию о типе, необходимую для вывода.


Для сопутствующих проблем:

  • Если у вас есть общий тип, класс буквального ISN `достаточно либо; вам нужно указать его в качестве явного параметра метода:

    Matchers.<YourContainer<YourType>>any(); 
    

    ... или извлечь статическому вспомогательный метод, который вы должны сделать вместо постоянной или локальной переменной, так как Mockito matchers work via side effects:

    public static LoginType anyLoginType() { 
        return Matchers.any(); 
    } 
    
  • Наконец, для будущих читателей, которые могут быть здесь, чтобы реализовать пользовательскую логику соответствия, найдите Matchers.argThat или MockitoHamcrest.argThat, чтобы адаптировать объект Matcher в стиле Matrix в вызов метода Mockito.

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