Mockito, канал вывода функции void в System.out? - PullRequest
1 голос
/ 12 марта 2020

У меня есть этот класс ведения журнала в моем устаревшем приложении,
Я пытаюсь смоделировать его для тестирования и вывести все сообщения из метода "WriteLog" в System.out
Это класс

public abstract class LoggingServicesWorker {
   public abstract void WriteLog(ELogLevel arg0, int arg1,String arg2,String arg3);
}

Это то, что я делал до сих пор,
Я не уверен, как записать в System.out
Также Как указать первому аргументу, чтобы иметь какой-либо тип перечисления (ELogLevel)?

LoggingServicesWorker logger = mock(LoggingServicesWorker.class);
Mockito.doNothing().when(logger).WriteLog(ELogLevel.DEBUG,anyInt(),anyString(),Mockito.eq(anyString()));

1 Ответ

2 голосов
/ 13 марта 2020

Вы можете использовать Mockito#doAnswer для выполнения побочных эффектов:

        doAnswer((invocation -> {
            System.out.println(Arrays.toString(invocation.getArguments()));
            return null;
        }))
            .when(worker)
            .WriteLog(any(ELogLevel.class), anyInt(), anyString(), anyString());

Автономный класс с поведением по умолчанию для возвращаемых значений (и может использоваться с Java 7):

class PrintArgsToStdoutAnswer implements Answer<Object> {
    private final ReturnsEmptyValues defaultReturn = new ReturnsEmptyValues();

    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        System.out.println(Arrays.toString(invocation.getArguments()));
        return defaultReturn.answer(invocation);
    }
}

... и используется в методе испытаний:

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