Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > JUnit negative test


Автор: jecl 23.7.2009, 13:49
Всем привет, есть примерно такой код:
Код

 public static void main(final String[] args) {
        try {
             ...........
        } catch (ParseException e) {
            LOG.error(e.getMessage());
            usage();
        } catch (IOException e) {
            LOG.error(e.getMessage());
        }
    }


Парс екс бросается при передаче неверных параметров, Ио екс - к примеру при передаче пути к несуществующему файлу.

Как сделать негатив тест такого кода?
Т.к. метод ничего не бросает, единственный вариант который я вижу - парсить лог на соответствующее сообщение. Т.е. конфигурируем логгер на вывод определенных левелов в файл, потом в тесте парсим файл и проверфяем на вхождение соответствующего меса.. Слишком запутано, как по мне, неужели никак иначе?
Есть ли возможность иначе получить лог инфу тестируемого класса?
Сенк.

Автор: jecl 23.7.2009, 17:34
Если кому понадобится вот что вышло:
Код

public class LogAccessor {

    private final ByteArrayOutputStream logRecords = new ByteArrayOutputStream();
    private StreamHandler handler = null;
    private String lastMessage = "";
    private List<String> logList = new LinkedList<String>();

    public LogAccessor(String name, Level level) {
        handler = new StreamHandler(logRecords, new MessageFormatter());
        Logger logger = Logger.getLogger(name);
        logger.addHandler(handler);
        logger.setLevel(level);
        logger.setUseParentHandlers(false);
    }

    public final String getLogsAsString() {
        handler.flush();
        return new String(logRecords.toByteArray());
    }

    public final String getLastMessage() {
        return lastMessage;
    }

    public final List<String> getLogsAsList() {
        return logList;
    }

    private class MessageFormatter extends Formatter {

        @Override
        public String format(LogRecord record) {
            lastMessage = record.getMessage();
            logList.add(lastMessage);
            return lastMessage;
        }

    }
}

Дальше парсим логи на вхождение нужного лога. Ничего более умного не придумал.

Автор: Akeem 4.8.2009, 10:50
Как вариант:

Вешаю ексит коды на ексепшн. Далее при тестировании проверяю какой ексит код заюзался и по нему уже определяю правильно ли отработал ексепшн.
Но это можно делать, например, на входных классах, методах и тп.

Автор: AntonSaburov 4.8.2009, 12:39
А не проще ли тогда выделить часть в блоке try в отдельный метод, который будет кидать эксепшн и тестить его ?

Автор: AndrewMormysh 6.8.2009, 10:57
Цитата(AntonSaburov @  4.8.2009,  11:39 Найти цитируемый пост)
выделить часть в блоке try в отдельный метод

+1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)