Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Design, Quality, Testing > Помогите выбрать Unit-Test framework


Автор: EvilsInterrupt 23.10.2013, 22:22
Почитал различные статьи по теме юнит-тестирования в Java, но так и не смог остановиться на чем-то конкретном. Я начинающий в Java , а TDD применяю при разработке на C++ с помощью Boost.Test.

Прошу помощи в выборе )

Автор: LSD 24.10.2013, 16:21
JUnit 4 самый распространенный и большинство других фреймворков умеют интегрироваться именно с ним. JUnit 3 устарел, так что имеет смысла его использовать.

Автор: EvilsInterrupt 24.10.2013, 21:36
LSD, Я что-то не обнаружил фичи которая есть в TestNG это возможность задать зависимость одного теста от другого. Может я ее проморгал и она есть в JUnit4 ?

Автор: LSD 25.10.2013, 16:07
Есть всякие обходные пути добиться этого, но стандартного - нет. Это сделано намеренно http://geosoft.no/development/unittesting.html.

Автор: EvilsInterrupt 26.10.2013, 19:36
LSD, Вы про "8. Keep tests independent" ?

Автор: LSD 28.10.2013, 13:05
Цитата(EvilsInterrupt @  26.10.2013,  20:36 Найти цитируемый пост)
Вы про "8. Keep tests independent" ?

Да.

Автор: EvilsInterrupt 29.10.2013, 10:57
LSD, Это весьма спорное утверждение. Применяю TDD программируя на C++ и в результате пришел к выводу, что есть куски кода, которые зависят от корректной работы других.

К примеру: Есть функция записи в лог, которая берет std::string filename и она будет некорректной, если вдруг по каким-либо причинам сам std::string работает не верно. Следовательно testWriteToLog() зависит от testStdString(). Вернее не зачем выполнять тест testWriteToLog(), если testStdString() провален. 

Автор: LSD 14.11.2013, 11:41
Цитата(EvilsInterrupt @  29.10.2013,  11:57 Найти цитируемый пост)
Это весьма спорное утверждение.

Безусловно. Любую практику можно оспаривать, более того любая практика имеет границы применимости и условия при которых она становится вредной. Я просто указал, что это сделано намерянно и привел аргументацию почему.


Цитата(EvilsInterrupt @  29.10.2013,  11:57 Найти цитируемый пост)
К примеру: Есть функция записи в лог, которая берет std::string filename и она будет некорректной, если вдруг по каким-либо причинам сам std::string работает не верно. Следовательно testWriteToLog() зависит от testStdString(). Вернее не зачем выполнять тест testWriteToLog(), если testStdString() провален. 

Неудачный пример, модуль содержащий std::string должен быть независимым от модуля логгирования. Это две независимые библиотеки. Соответвенно тестироваться они должны независимо. Если в std::string есть проблемы, то он не должен собраться и модуль с логгированием или не собираетя или собирается используя предыдущую стабильную версию библиотеки.

Автор: EvilsInterrupt 30.11.2013, 22:55
Цитата(LSD @  14.11.2013,  12:41 Найти цитируемый пост)
 Это две независимые библиотеки.

Да, это две независимые между собой части приложения, но они не зависимы Физически. Однако логически они зависимы друг от друга по той лишь причине что одна из них работает лишь только тогда, когда вторая работает корректно и хорошо!
Еще раз:
Если проверка по корректной работе std::string завершена с ошибкой, т.е. failed , то осуществлять проверку корректной работы записи в лог не имеет смысла и эту проверку сразу же считать "failed".

Приведу аналогию из жизни:
Вы решили купить диван, но Вы же не поедите в магазин сразу же! Уверен Вы откроете свой любимый веб-браузер и узнаете часы работы магазина. Если вдруг Вы узнаете, что магазин работает до 19:00 сегодня, а сейчас уже 18:55, то уверяю Вы останетесь дома! По одной лишь причине нету никакого смысла ехать в магазин, если до конца рабочего дня в магазине осталось 5 мин. Результат попытки покупки дивана уже известен, т.к. за 5 мин приехать - выбрать - оплатить - вынести из магазина вы вряд ли сможете.

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

Автор: LSD 2.12.2013, 14:38
Цитата(EvilsInterrupt @  30.11.2013,  23:55 Найти цитируемый пост)
Еще раз:
Если проверка по корректной работе std::string завершена с ошибкой, т.е. failed , то осуществлять проверку корректной работы записи в лог не имеет смысла и эту проверку сразу же считать "failed".

Еще раз: я не говорил про отсутвие зависимостей, я говорил про то что модули должны собираться независимо. Пихать в один модуль и строки и логгирование это плохой дизайн.


Цитата(EvilsInterrupt @  30.11.2013,  23:55 Найти цитируемый пост)
Приведу аналогию из жизни:

Вообще не вижу никакой связи сабжем.

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