Как смоделировать enum.values ​​() в mockito - PullRequest
0 голосов
/ 17 марта 2019

Прежде всего я изучаю java и mockito, провел поиск и пока не могу найти правильный ответ.

Псевдокод выглядит так

public enum ProdEnum {
    PROD1(1, "prod1"),
    PROD2(2, "prod2"),
    ......
    PROD99(2, "prod2");

    private final int id;
    private final String name;

    private ProdEnum(int id, String name) {
        this.id = id;
        this.name = name;
    }

    prublic String getName() { return this.name; }
}


public class enum1 {
   public static void main(String[] args) {
      // Prints "Hello, World" in the terminal window.
      System.out.println("Hello, World");

      List<String> prodNames = Array.stream(ProdEnum.values())
            .map(prodEnum::getName)
            .collect(Collectors.toList());

      // verify(prodNames);
   }
}

Мой вопрос в модульном тесте, как генерировать поддельные prodNames? Только 2 или 3 продукта, необходимых для тестирования, В моем модульном тесте я попробовал это

List<ProdEnum> newProds = Arrays.asList(ProdEnum.PROD1, ProdEnum.PROD2);
when(ProdEnum.values()).thenReturn(newProds);

но он говорит, что не может разрешить метод 'thenReturn (java.util.List <... ProdEnum>)'

Спасибо!

1 Ответ

1 голос
/ 17 марта 2019

Вы не можете смоделировать статику в ванильном Mockito.

Если вам нужен небольшой рефакторинг, тогда:

1) Переместите enum.values() вызов в метод уровня пакета:

..
List<String> prodNames = Array.stream(getProdNames())
            .map(prodEnum::getName)
            .collect(Collectors.toList());
..

List<String> getProdNames(){
  return ProdEnum.values();
}

2) Шпион на своем SUT:

enum1 enumOneSpy = Mockito.spy(new enum1());

3) Насмешка getProdNames() метод:

doReturn(newProds).when(enumOneSpy).getProdNames();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...