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