![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
nitzshe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 27.5.2008 Репутация: нет Всего: нет |
Всем добрый день.
Никто не подскажет как применить JUnit для приватных методов с передачей параметров? |
|||
|
||||
Shaggie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: 4 Всего: 72 |
Тестируй публичный контракт класса и контролируй покрытие кода тестами.
Тебя не должно волновать выполнение приватного метода. Главное - ожидаемое поведение публичных методов при любых инвариантах входных параметров. По-хорошему, в результате выполнения тестов приватный код должен быть полностью покрыт выполнением тестов публичных методов. Если часть кода приватных классов осталась непокрытой тестами - задумайся, нужен ли тебе этот код, и не правильнее ли просто удалить его. В некоторых случаях имеет смысл как следует подумать и вынести приватный метод в публичный контракт другого класса. Возможно, ему там самое место. |
|||
|
||||
nitzshe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 27.5.2008 Репутация: нет Всего: нет |
Спасибо большое.
Вы правы. Сам уже до этого додумался. Но с помощью рефлексии несколько методов обхватил тестами Вот ссылочку нашел: http://www.jroller.com/CoBraLorD/category/Java Это сообщение отредактировал(а) nitzshe - 18.3.2009, 15:03 |
|||
|
||||
Shaggie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: 4 Всего: 72 |
Нехорошо. В таком случае тестируется не публичный контракт класса, а детали реализации, которые меняются заметно чаще. И исправление внутренних деталей работы класса, не ведущее к изменению контракта (и прекрасно проходящее все тесты публичных методов), заставит переписывать кучу тестов и убить впустую немало времени. |
|||
|
||||
niasilil |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
Иногда удобно пользозвать junit для тестирования по ходу дела. Я обычно делаю методы protected и гоняю тест юнит пока не получу требуемый результат. Потом меняю на private и тест кейсы стираю.
-------------------- SCJP 5.0, SCJD |
|||
|
||||
pompei |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: 1 Всего: 6 |
Вообще тестирующий класс должен находиться в том же пакете что и тестируемый например ru.yourfirma.coolproject.asd.MyCoolClass - тестируемый класс ru.yourfirma.coolproject.asd.MyCoolClassTest - тестирующий класс только естественно они должны находиться в разных src-папках (и тестовая src-папка не будет вкомпилироваться в готовый продукт). В этом случае если у вас есть какой-нибудь внутренний метод в MyCoolClass, и который вы не хотите открывать всем, то вы делаете этот метод с доступом на уровне пакета и он становиться видимым из MyCoolClassTest - и его можно тестировать. Но если же вы очень настырный и вообще не хотите трогать префикс private но хотите этот метод протестировать, то единственный выход - reflection Добавлено @ 05:17
А если в будущем вам придется поменять функционал этого метода? (сопровождение же ещё ни кто не отменял) То вам придётся писать тест заного. Но этого делать вы не будете (пожелеете время - ведь при сопровожении обычно всё надо делать быстро). Вы будете менять на свой страх и риск - потом чето не заработает - придется ставить что-то типа System.out.println(...) - как всегда где-то вылезет надоедливый NullPointerException - придётся вставлять дополнительные if-ы. Ещё раз запустить приложение целиком. И ещё раз. И ещё раз. И ещё раз.... И если таких мест будет куча, то сопровождение превратиться в муку, а система в неподъемного мостра, от упоминания которого вы будете вздрагивать, а по ночам вам будут сниться кошмары с NullPoinerException-ами, которые размножаются как кролики и их становиться так много что вы начинаете задыхаться и вдруг просыпаетесь весь в поту.................... Это сообщение отредактировал(а) pompei - 19.3.2009, 05:24 --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
||||
|
|||||
niasilil |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.6.2007 Где: USA Репутация: 8 Всего: 9 |
[QUOTE=pompei,19.3.2009, 05:07]
сопровождение - это maintenance по английски, да? вобщем, где то так и есть, только сплю хорошо. ![]() Только тест кейсы на public методы не стираются же, так что все нормально с тестированием в этом отношении. -------------------- SCJP 5.0, SCJD |
||||
|
|||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
поставить им другой спецификатор доступа, потестировать, затем обратно выставить private
Добавлено через 1 секунду поставить им другой спецификатор доступа, потестировать, затем обратно выставить private |
|||
|
||||
pompei |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.9.2007 Репутация: 1 Всего: 6 |
а как в таком случае будет работать ночное тестирование? Самый нормальный вариант закрытые методы, которые надо протестировать надо делать пакетными - это даже супер-пупер гуру типа Мартина Фаулера советуют делать. Это сообщение отредактировал(а) pompei - 19.3.2009, 13:35 --------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап. |
|||
|
||||
Saboteur |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.8.2007 Где: Минск Репутация: нет Всего: нет |
||||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
||||
|
||||
Saboteur |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.8.2007 Где: Минск Репутация: нет Всего: нет |
Samotnik, не поверишь, я даже так делал,
![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |