Невозможно написать контрольный пример Mockito для моего метода void - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно проверить этот код с помощью Mockito (JUnit):

public class Calculation {

    public void logTimeTaken(String label, long estimatedTime, int size, boolean isDebug) {
       String out = label + " took " + TimeUnit.MILLISECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS) + " milliseconds for " + size + " events!";
        if (isDebug) {
            System.out.println(out);
        } else {
            System.out.println(out);
        }
    }
}

Я ищу много примеров в Google, но все еще не понимаю.

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете сконфигурировать System с экземпляром PrintStream, который вы можете затем использовать после вызова Calculation.logTimeTaken.

Вот пример:

@Test
public void canLogTimeTaken() {
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    PrintStream out = new PrintStream(bout);
    System.setOut(out);

    Calculation sut = new Calculation();
    sut.logTimeTaken("label", 20 , 2, false);
    assertEquals("if isDebug is false label took 0 milliseconds for 2 events!\n", bout.toString());
}

Примечание: тамЗдесь нет необходимости в Mockito, это просто ванильный JUnit, без насмешек.

Но , возможно, будет лучше спроектировать logTimeTaken для двух различных аспектов:

  • Получение сообщения журнала
  • Регистрация этого сообщения

Например:

public String createTimeTakenMessage(String label, long estimatedTime, int size, boolean isDebug) {
    return label + " took " + TimeUnit.MILLISECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS) + " milliseconds for " + size + " events!";
}

public void logTimeTaken(String message) {
    System.out.println(message);
}

Тогда проверка createTimeTakenMessage тривиальна, и вы можете дажерешите вообще не проверять logTimeTaken, поскольку все, что он делает, это вызывает системный метод.Или, возможно, вы бы скрыли «действие журнала» за интерфейсом с реализацией, использующей System.out сейчас и, возможно, позже, с другими реализациями, использующими формальную структуру ведения журналов, такую ​​как Logback.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...