The slf4j-simple implementation is good when executing tests. It "simply" logs to System.err. It made an effort to assert if there are any exception logged when running a Junit test case:
package se.lesc.blog;
import static org.junit.Assert.*;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JunitSlf4jLoggerTest {
@Test
public void testCodeShouldNotYeildExceptionInLog() throws Exception {
//Store away System.err (that slf4j-simple uses to log to).
//Note: This is a bit fragile!
PrintStream oldSystemError = System.err;
//Re-route System.error to a buffer
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(byteStream);
System.setErr(printStream);
//Invoke production code
new MyProductionCode();
//Make sure no exception has been logged
String logging = new String(byteStream.toByteArray(), "utf-8");
assertTrue("No Exception should be found in log",
! logging.contains("Exception"));
//Reset re-routing of System.err
System.setErr(oldSystemError);
}
private static class MyProductionCode {
private final Logger logger =
LoggerFactory.getLogger(MyProductionCode.class);
MyProductionCode() {
logger.error("Something went wrong", new Exception());
}
}
}
No comments:
Post a Comment