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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JUnit для приватных методов 
:(
    Опции темы
nitzshe
Дата 17.3.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем добрый день.

Никто не подскажет как применить JUnit для приватных методов с передачей параметров?
PM MAIL   Вверх
Shaggie
Дата 17.3.2009, 18:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



Тестируй публичный контракт класса и контролируй покрытие кода тестами.

Тебя не должно волновать выполнение приватного метода. Главное - ожидаемое поведение публичных методов при любых инвариантах входных параметров. По-хорошему, в результате выполнения тестов приватный код должен быть полностью покрыт выполнением тестов публичных методов.

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

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


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
nitzshe
Дата 18.3.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо большое.

Вы правы. Сам уже до этого додумался. 
Но с помощью рефлексии несколько методов обхватил тестами 

Вот ссылочку нашел:
http://www.jroller.com/CoBraLorD/category/Java

Это сообщение отредактировал(а) nitzshe - 18.3.2009, 15:03
PM MAIL   Вверх
Shaggie
Дата 18.3.2009, 15:36 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

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



Цитата(nitzshe @  18.3.2009,  15:02 Найти цитируемый пост)
Но с помощью рефлексии несколько методов обхватил тестами 

Нехорошо. В таком случае тестируется не публичный контракт класса, а детали реализации, которые меняются заметно чаще. И исправление внутренних деталей работы класса, не ведущее к изменению контракта (и прекрасно проходящее все тесты публичных методов), заставит переписывать кучу тестов и убить впустую немало времени.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
niasilil
Дата 19.3.2009, 02:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Иногда удобно пользозвать junit для тестирования по ходу дела. Я обычно делаю методы protected и гоняю тест юнит пока не получу требуемый результат. Потом меняю на private и тест кейсы стираю. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
pompei
Дата 19.3.2009, 05:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(nitzshe @ 17.3.2009,  18:12)
Всем добрый день.

Никто не подскажет как применить JUnit для приватных методов с передачей параметров?

Вообще тестирующий класс должен находиться в том же пакете что и тестируемый например

ru.yourfirma.coolproject.asd.MyCoolClass - тестируемый класс

ru.yourfirma.coolproject.asd.MyCoolClassTest - тестирующий класс

только естественно они должны находиться в разных src-папках (и тестовая src-папка не будет вкомпилироваться в готовый продукт).

В этом случае если у вас есть какой-нибудь внутренний метод в MyCoolClass, и который вы не хотите открывать всем,
то вы делаете этот метод с доступом на уровне пакета и он становиться видимым из MyCoolClassTest - и его можно тестировать.

Но если же вы очень настырный и вообще не хотите трогать префикс private но хотите этот метод протестировать,
то единственный выход - reflection

Добавлено @ 05:17
Цитата(niasilil @ 19.3.2009,  02:01)
Иногда удобно пользозвать junit для тестирования по ходу дела. Я обычно делаю методы protected и гоняю тест юнит пока не получу требуемый результат. Потом меняю на private и тест кейсы стираю.

А если в будущем вам придется поменять функционал этого метода? (сопровождение же ещё ни кто не отменял)
То вам придётся писать тест заного. Но этого делать вы не будете (пожелеете время - ведь при сопровожении обычно всё надо делать быстро).
Вы будете менять на свой страх и риск - потом чето не заработает - придется ставить что-то типа System.out.println(...) - как всегда где-то
вылезет надоедливый NullPointerException - придётся вставлять дополнительные if-ы. Ещё раз запустить приложение целиком. И ещё раз. И ещё раз. И ещё раз....

И если таких мест будет куча, то сопровождение превратиться в муку, а система в неподъемного мостра,
от упоминания которого вы будете вздрагивать, а по ночам вам будут сниться кошмары с NullPoinerException-ами,
которые размножаются как кролики и их становиться так много что вы начинаете задыхаться и вдруг просыпаетесь
весь в поту....................

Это сообщение отредактировал(а) pompei - 19.3.2009, 05:24
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
niasilil
Дата 19.3.2009, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



[QUOTE=pompei,19.3.2009,  05:07]
Цитата(nitzshe @ 17.3.2009,  18:12)
Добавлено @ 05:17
Цитата(niasilil @ 19.3.2009,  02:01)
Иногда удобно пользозвать junit для тестирования по ходу дела. Я обычно делаю методы protected и гоняю тест юнит пока не получу требуемый результат. Потом меняю на private и тест кейсы стираю.

А если в будущем вам придется поменять функционал этого метода? (сопровождение же ещё ни кто не отменял)
То вам придётся писать тест заного. Но этого делать вы не будете (пожелеете время - ведь при сопровожении обычно всё надо делать быстро).
Вы будете менять на свой страх и риск - потом чето не заработает - придется ставить что-то типа System.out.println(...) - как всегда где-то
вылезет надоедливый NullPointerException - придётся вставлять дополнительные if-ы. Ещё раз запустить приложение целиком. И ещё раз. И ещё раз. И ещё раз....

И если таких мест будет куча, то сопровождение превратиться в муку, а система в неподъемного мостра,
от упоминания которого вы будете вздрагивать, а по ночам вам будут сниться кошмары с NullPoinerException-ами,
которые размножаются как кролики и их становиться так много что вы начинаете задыхаться и вдруг просыпаетесь
весь в поту....................

сопровождение - это maintenance по английски, да? 
вобщем, где то так и есть, только сплю хорошо.  smile 
Только тест кейсы на public методы не стираются же, так что все нормально с тестированием в этом отношении. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
Samotnik
Дата 19.3.2009, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



поставить им другой спецификатор доступа, потестировать, затем обратно выставить private

Добавлено через 1 секунду
поставить им другой спецификатор доступа, потестировать, затем обратно выставить private 

PM MAIL   Вверх
pompei
Дата 19.3.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Samotnik @ 19.3.2009,  11:20)
поставить им другой спецификатор доступа, потестировать, затем обратно выставить private

Добавлено @ 11:20
поставить им другой спецификатор доступа, потестировать, затем обратно выставить private

а как в таком случае будет работать ночное тестирование?

Самый нормальный вариант закрытые методы, которые надо протестировать надо делать пакетными - это даже супер-пупер гуру типа Мартина Фаулера советуют делать.

Это сообщение отредактировал(а) pompei - 19.3.2009, 13:35
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
Saboteur
Дата 19.3.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А нельзя создать внутренний класс, который будет иметь доступ ко всем частям внешнего?
 smile 

Кстати: тыц и тыц

Это сообщение отредактировал(а) Saboteur - 19.3.2009, 19:34
PM MAIL ICQ   Вверх
Samotnik
Дата 20.3.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Saboteur,  будем ссылками меряться ???
Окей.  Вот ссылко  smile  smile  smile  smile 
PM MAIL   Вверх
Saboteur
Дата 20.3.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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