Mahoney / slf4j-test

Implementation of SLF4J which allows easy access to logging events in tests
39 stars 24 forks source link

This example doesn't work #17

Open vasusrinivas opened 7 years ago

vasusrinivas commented 7 years ago

public class Slf4jUser {

private static final Logger logger = LoggerFactory.getLogger(Slf4jUser.class);

public void aMethodThatLogs() {
    logger.info("Hello World!");
}

}

public class Slf4jUserTest {

Slf4jUser slf4jUser = new Slf4jUser();
TestLogger logger = TestLoggerFactory.getTestLogger(Slf4jUser.class);

@Test
public void aMethodThatLogsLogsAsExpected() {
    slf4jUser.aMethodThatLogs();

    assertThat(logger.getLoggingEvents(), is(asList(info("Hello World!"))));
}

@After
public void clearLoggers() {
    TestLoggerFactory.clear();
}

}

This test case throws java.lang.AssertionError: Expected: is <[LoggingEvent[level=INFO,mdc={},marker=Optional.absent(),throwable=Optional.absent(),message=Hello World!,arguments=[]]]> but: was <[]> at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20) at org.junit.Assert.assertThat(Assert.java:956) at org.junit.Assert.assertThat(Assert.java:923) at dozerExp.Slf4jUserTest.aMethodThatLogsLogsAsExpected(Slf4jUserTest.java:22) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

marckamerbeek commented 7 years ago

You probably have more then one log binding on your classpath. At least, that is my problem.

gabrilogos1985 commented 6 years ago

Using Spring Boot i had to add another exclusion:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <classpathDependencyExcludes>
       <classpathDependencyExcludes>ch.qos.logback:logbackclassic</classpathDependencyExcludes>
    **<classpathDependencyExcludes>ch.qos.logback:logback-core</classpathDependencyExcludes>**
        </classpathDependencyExcludes>
      </configuration>
    </plugin>
  </plugins>
</build>