Wenn Sie testen möchten, ob Ihr Testziel die Ausnahme tatsächlich abfängt. Lassen Sie den Test einfach wie folgt (mit dem Mock-Collaborator unter Verwendung von jMock2):
@Test
public void consumesAndLogsExceptions() throws Exception {
context.checking(new Expectations() {
{
oneOf(collaborator).doSth();
will(throwException(new NullPointerException()));
}
});
target.doSth();
}
Der Test würde bestehen, wenn Ihr Ziel die geworfene Ausnahme tatsächlich abfängt, andernfalls würde der Test fehlschlagen.
Wenn Sie Ihre Ausnahmeabfanglogik testen möchten, wird es komplexer. Ich schlage vor, die Verarbeitung einem Collaborator zu überlassen, der gemockt werden könnte. Daher könnte der Test wie folgt aussehen:
@Test
public void consumesAndLogsExceptions() throws Exception {
Exception e = new NullPointerException();
context.checking(new Expectations() {
{
allowing(collaborator).doSth();
will(throwException(e));
oneOf(consumer).consume(e);
}
});
target.doSth();
}
Aber manchmal ist es überdesignet, wenn Sie es nur protokollieren möchten. In diesem Fall könnte dieser Artikel(http://java.dzone.com/articles/monitoring-declarative-transac, http://blog.novoj.net/2008/09/20/testing-aspect-pointcuts-is-there-an-easy-way/) hilfreich sein, wenn Sie in diesem Fall auf TDD bestehen.