This time a simple one.
Following test will help you understand the code:
public class MyLoggerTest implements Console {
private String msg;
private MyLogger logger = new MyLogger(this);
@Test
public void handleNonIOExceptions() {
logger.error(new IllegalArgumentException("Ignore Exception"));
assertEquals("SEVERE: Dying due to exception : Ignore Exception", msg);
}
@Test
public void ignoreSpecificIOExceptions() {
String errorMsg = "Broken pipe:" + Math.random();
logger.error(new IOException(errorMsg));
assertEquals("FINE: Ignoring Exception for : " + errorMsg, msg);
}
@Test
public void handleGenericIOExceptions() {
String errorMsg = "Random IO Error:" + Math.random();
logger.error(new IOException(errorMsg));
assertEquals("SEVERE: Dying due to exception : " + errorMsg, msg);
}
@Override
public void write(final String msg) {
this.msg = msg;
}
} |
public class MyLoggerTest implements Console {
private String msg;
private MyLogger logger = new MyLogger(this);
@Test
public void handleNonIOExceptions() {
logger.error(new IllegalArgumentException("Ignore Exception"));
assertEquals("SEVERE: Dying due to exception : Ignore Exception", msg);
}
@Test
public void ignoreSpecificIOExceptions() {
String errorMsg = "Broken pipe:" + Math.random();
logger.error(new IOException(errorMsg));
assertEquals("FINE: Ignoring Exception for : " + errorMsg, msg);
}
@Test
public void handleGenericIOExceptions() {
String errorMsg = "Random IO Error:" + Math.random();
logger.error(new IOException(errorMsg));
assertEquals("SEVERE: Dying due to exception : " + errorMsg, msg);
}
@Override
public void write(final String msg) {
this.msg = msg;
}
}
public class MyLogger {
private final Console out;
public MyLogger(final Console out) {
this.out = out;
}
private static final String[] IGNORED_IOEXCEPTION_MESSAGES = {
"An existing connection was forcibly closed by the remote host",
"Connection reset by peer",
"Broken pipe",
"Connection timed out",
"No route to host",
};
public void error(final Throwable t) {
if (isIgnored(t)) {
out.write("FINE: Ignoring Exception for : " + t.getMessage());
} else {
out.write("SEVERE: Dying due to exception : " + t.getMessage());
}
}
private boolean isIgnored(final Throwable t) {
if (t instanceof IOException) {
final String exceptionMessage = t.getMessage();
for (String ignoredMessage : IGNORED_IOEXCEPTION_MESSAGES) {
if (exceptionMessage.startsWith(ignoredMessage)) {
return true;
}
}
}
return false;
}
} |
public class MyLogger {
private final Console out;
public MyLogger(final Console out) {
this.out = out;
}
private static final String[] IGNORED_IOEXCEPTION_MESSAGES = {
"An existing connection was forcibly closed by the remote host",
"Connection reset by peer",
"Broken pipe",
"Connection timed out",
"No route to host",
};
public void error(final Throwable t) {
if (isIgnored(t)) {
out.write("FINE: Ignoring Exception for : " + t.getMessage());
} else {
out.write("SEVERE: Dying due to exception : " + t.getMessage());
}
}
private boolean isIgnored(final Throwable t) {
if (t instanceof IOException) {
final String exceptionMessage = t.getMessage();
for (String ignoredMessage : IGNORED_IOEXCEPTION_MESSAGES) {
if (exceptionMessage.startsWith(ignoredMessage)) {
return true;
}
}
}
return false;
}
}
and
public interface Console {
void write(String msg);
} |
public interface Console {
void write(String msg);
}
Feel free to download the Java project.
This entry was posted
on Wednesday, August 5th, 2009 at 9:05 PM and is filed under Agile, Design, Programming, Testing.
You can follow any responses to this entry through the RSS 2.0 feed.
You can skip to the end and leave a response. Pinging is currently not allowed.