У меня есть пользовательское приложение Log4j, которое реализовано как класс Singleton и ожидает объект Layout при вызове метода класса getInstance()
. Я написал тестовый пример JUnit5, чтобы проверить, генерируется ли исключение, когда объект Layout не установлен. Я бросил IllegalArgumentException
в случае, если раскладка не установлена.
Приведенный ниже код вызывает исключение при выполнении
public class App {
public static void main(String[] args){
Logger logger = Logger.getLogger("test");
CustomAppender m = CustomAppender.getInstance();
logger.addAppender(m);
logger.info("test"); // Exception is thrown by this statement
}
}
Однако приведенный ниже тестовый пример не пройден. На самом деле, никаких исключений не выдается.
@Test
public void testException(){
Logger logger = Logger.getLogger("test");
CustomAppender m = CustomAppender.getInstance();
logger.addAppender(m);
assertThrows(Exception.class, () -> {
logger.info("test");
});
}
Что мне здесь не хватает?
РЕДАКТИРОВАТЬ: Еще немного кода из CustomAppender
класса
private CustomAppender(Layout layout, ArrayList<LoggingEvent> list) {
cLayout = layout;
eventsList = list;
discardedLogCount = 0;
super.setLayout(cLayout);
}
// Instance with a user-defined list and a layout
public static CustomAppender getInstance(Layout layout, ArrayList<LoggingEvent> list) {
if (INSTANCE == null) {
// Thread-safety
synchronized (CustomAppender.class) {
INSTANCE = new CustomAppender(layout, list);
}
}
return INSTANCE;
}
// Instance with an empty list
public static CustomAppender getInstance(Layout layout){
return CustomAppender.getInstance(layout, new ArrayList<>());
}
// Instance with a null layout
public static CustomAppender getInstance(ArrayList<LoggingEvent> list){
return CustomAppender.getInstance(null, list);
}
// Default instance
public static CustomAppender getInstance(){
return CustomAppender.getInstance(null, new ArrayList<>());
}
// Appends at most maxSize items
@Override
protected void append(LoggingEvent event) throws IllegalArgumentException {
if (this.cLayout == null)
throw new IllegalArgumentException();
if (eventsList.size() < maxSize) {
eventsList.add(event);
} else {
// Remove the oldest item and add a new one
eventsList.remove(0);
discardedLogCount++;
eventsList.add(event);
}
}