Я очень плохо знаком с JUnit и Mockito. Я пытаюсь написать контрольный пример, используя JUnit и Mockito для проверки сообщений журнала. В моем коде есть 2 сообщения журнала.
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public int run(final String[] args) throws Exception {
if (args.length != 2) {
log.info("Usage: input-path output-path");
log.info("Input and output path are required in the same sequence");
System.exit(1);
}
final String inputPath = args[0];
final String outputPath = args[1];
//some code
return 0;
}
Написанный мною тестовый пример:
import org.apache.log4j.Appender;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.spi.LoggingEvent;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
@RunWith(MockitoJUnitRunner.class)
public class testRun {
@Mock
private Appender mockAppender;
@Before
public void setup() {LogManager.getRootLogger().addAppender(mockAppender);}
@After
public void teardown() {LogManager.getRootLogger().removeAppender(mockAppender);}
@Test
public void testValidArguments() {
//some code
Logger.getLogger(TryTest.class).info("Usage: input-path output-path");
Logger.getLogger(TryTest.class).info("Input and output path are required in the same sequence");
ArgumentCaptor<LoggingEvent> argument = ArgumentCaptor.forClass(LoggingEvent.class);
verify(appender,times(2)).doAppend(argument.capture());
assertEquals(Level.INFO, argument.getValue().getLevel());
assertEquals("Usage: input-path output-path", argument.getValue().getMessage());
assertEquals("Input and output path are required in the same sequence", argument.getValue().getMessage());
}
}
Я видел некоторые решения, но они требуют создания другого класса, который я делаю не хочу. Также, пока я выполняю код, он принимает второе значение, т. Е. «Путь ввода и вывода требуется в одной и той же последовательности». Код выполняется нормально, если есть только одно сообщение журнала. Я могу поместить оба сообщения в один log.info, если это не может быть решено. Тем не менее, я пойду sh, чтобы узнать, есть ли какое-либо возможное решение этой конкретной проблемы.