Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JUnit negative test, main не бросающий эксов, как тестировать 
:(
    Опции темы
jecl
Дата 23.7.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 12.10.2007

Репутация: нет
Всего: нет



Всем привет, есть примерно такой код:
Код

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


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

Как сделать негатив тест такого кода?
Т.к. метод ничего не бросает, единственный вариант который я вижу - парсить лог на соответствующее сообщение. Т.е. конфигурируем логгер на вывод определенных левелов в файл, потом в тесте парсим файл и проверфяем на вхождение соответствующего меса.. Слишком запутано, как по мне, неужели никак иначе?
Есть ли возможность иначе получить лог инфу тестируемого класса?
Сенк.
PM MAIL   Вверх
jecl
Дата 23.7.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 12.10.2007

Репутация: нет
Всего: нет



Если кому понадобится вот что вышло:
Код

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;
        }

    }
}

Дальше парсим логи на вхождение нужного лога. Ничего более умного не придумал.
PM MAIL   Вверх
Akeem
Дата 4.8.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: нет
Всего: 3



Как вариант:

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


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 4.8.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



А не проще ли тогда выделить часть в блоке try в отдельный метод, который будет кидать эксепшн и тестить его ?
PM MAIL WWW ICQ   Вверх
AndrewMormysh
Дата 6.8.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 8.2.2008

Репутация: 1
Всего: 1



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

+1
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.