Метод не выдает в тестовом примере JUnit5 - PullRequest
0 голосов
/ 03 октября 2019

У меня есть пользовательское приложение 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...