Junit-Test-Protokoll-Anweisungen

Ich habe ein java-8-app mit einer Klasse foo wie diese:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Foo {
    private final Logger log = LoggerFactory.getLogger(Foo.class);

    public String something() {
        log.info("doing foo test");
        return "test";
    }
}

Dem ich Schreibe eine JUnit (Junit 4.11) test case wie diesem:

public class FooTest {
    private Foo foo;

    @Before
    public void setUp() throws Exception {
        foo = new Foo();
    }

    @Test
    public void testSomething() {
        String result = foo.something();
        assertEquals(result,"test");
    }
}

Mein Ziel ist es, einen test schreiben Fall, dass die tests die something Methode für Sie die return-Wert UND der logging-Anweisung verwendet, um sicherzustellen, dass etwas protokolliert wird. Ich habe Stunden damit verbracht scheuern im web, um herauszufinden, wie, um das setup der junit-test der logging-Anweisung verwendet. Ich habe versucht diese, diese, diese und diese Methode ohne Erfolg.

Ich weiß nicht, ob es etwas, was ich falsch mache oder was. Aber hier ist mein code basiert auf dem letzten Beispiel:

public class FooTest {
    private Foo foo;
    @Mock private Appender appender;
    @Captor private ArgumentCaptor captor;

    @Before
    public void setUp() throws Exception {
        foo = new Foo();
        MockitoAnnotations.initMocks(this);
        Logger.getRootLogger().addAppender(appender);
    }

    @After
    public void tearDown() throws Exception {
        Logger.getRootLogger().removeAllAppenders();
    }

    @Test
    public void testSomething() {
        String result = foo.something();
        assertEquals(result,"test");
        verify(appender).doAppend(((LoggingEvent) captor.capture()));
        LoggingEvent loggingEvent = (LoggingEvent) captor.getValue();
        assertEquals(loggingEvent.getRenderedMessage(), "doing foo test");
    }
}

Aber wenn ich diesen starte bekomme ich folgende Fehlermeldung:

Wanted but not invoked:
appender.doAppend(<Capturing argument>);
-> at <package>.testSomething(FooTest.java:22)
Actually, there were zero interactions with this mock.

Gibt es ein einfacher Weg das zu erreichen, was ich will? Wenn dies der beste Weg ist dann, was mache ich falsch?

InformationsquelleAutor Richard | 2016-08-09
Schreibe einen Kommentar