Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 11:33 04.07.25 
Клубове/ Компютри и Интернет / Програмисти Пълен преглед*
Информация за клуба
Тема Re: TDD употреба [re: Дeшeв]
Автор RealGuru (непознат )
Публикувано19.11.08 16:17  



Не знам точно каква е идеята на ТДД, но аз съм стигнал до няколко извода и гледам, че тук ги коментирате и тях.

1. По време на дизайна (на архитектурата) мисли и за тестването. Код (архитектура) която не е мислена за тестване много трудно се тества.

Един стар проект имаме без да е замислен за юнит тестове. Ми то, за да му тестваш персистансето ти трябва апликейшън сървър.

Сега всичко ново, което правим го мислим и как да се тества. Т.е. архитектурата да позволява тестване на всички нива отделно като юнит тестове и като интеграционни тестове като няма такива зависимости.


2. При рефакторинг тестовете ти дават сигурност, че нищо не си счупил. Т.е. правиш рефакторинг на корем без да се притесняваш. И това подобрява кода/архитектурата неимоверно много. До сега никога не съм виждал архитектура, която да не се променя. Обикновено идват нови изисквания или пък виждаш, че архитектурата не е толкова добра колкото сме си мислели в началото. Имаш ли тестове можеш да променяш без да се притесняваш. Нямаш ли тестове почваш да кърпиш отстрани, да добавяш код, да дублираш код с малки промени, да се притесняваш да пипаш стария код, щото не знаеш какво можеш да счупиш.


3. Тестване на всички нива, на които можеш да тестваш.



Преди 2-3 седмици бях пуснал една тема за тестване на сървлети. Те такова тестване нямахме още и аз не бях правил, та реших да направя сега. Споделям опит и какво направихме по темата.


Значи до момента имаме пълно разделение на логиката от презентацията. ПОЖО класове + персистансе. За тях имаме юнит тестове тестващи логиката, доколкото я има (щото няма много логика) и персистансето (всъщност това е по-важно за тестване).

После другото ниво са сървлетите, които изпълняват няколко задачи: секюрити; диспетчинг; инициализиране на обекти като се четат параметри от рекюеста; викане на някакви методи на тези обекти било за запис, търсене или каквото друго трябва; пъхане на разни неща из сесията, които ще трябват при следваща заявка от страна на браузъра и неща от сорта.

Презентационното ниво е JSP. Сървлета прави каквото прави и пъха разни неща в контекста на рекюеста и после вика някакво JSP, което показва нещата на екрана. Стандартна (даже малко остаряла) архитектура. :)



Та идеята ми беше как да се хвани логиката в сървлетите. И ви питах за опит. Та мислих, мислих и какво измислих.

Значи редиректа към JSP минава през едно място (един метод). Сървлетите си викат едно методче с параметър името на JSP страницата и метода вика JSP-то. Перфектно място да се "хванат" нещата.

Та този метод в тестов режим вместо да вика JSP-то сериализира рекюеста в ХМЛ и го праща към браузъра. Това включва: всички параметри изпратени от браузъра; хедърите на рекюеста; атрибутите на рекюест контекста; атрибутите на сесията; и още каквото може да се докопа.

Та всичко това се праща от сървъра в ХМЛ формат към клиента.

От страната на клиента ХМЛ се десериализира обратно в съответните обекти и с JUnit правя съответните assert-и да видя състоянието на обектите и дали изобщо го има.

Ползвам XStream за ХМЛ сериализация и HttpClient от Апаче за клиент. Това последното поддържа кукита и съответно автоматично си поддържа сесията.

Понаписах около 100 реда код да направя нещата по-лесни за викане. HttpClient има супер флексибъл архитектура и може да прави всичко, ама аз искам с един метод да си сетна параметрите, а не да инициализирам 20 неща за да сетна един параметър. Та си понаписах малко код около XStream и HttpClient.


Недостатъците са, че е хоме майд солюшън. Обаче мен ме кефи в няколко аспекта:

1. Кодът се изпълнява както в продакшън без никакви допълнения.
2. Тестовият код симулира браузър.
3. Получавам обектите в сесията и рекюеста. Мога да ги контролирам по бройка и размер. Мога да следя във всеки един момент какви боклуци има в сесията и да ги разкарвам когато не ми трябват. Т.е. мога да гледам ако съм вкарал нещо повече в сесията или в рекюеста. Така се намалява използваната памет.
4. Това симулира интеграционен тест на всички нива без последното (презентационното).
5. Много ясно, точно и конкретно се тества логиката, която я има в сървлетите. Значи сървлета получава такива и такива параметри. На базата на тях очаквам в сесията да имам този и този обект, а в рекюест контекста този и онзи обект. Просто перфектно - все едно тестваш публични методи на класове, а те колко прайвът методи викат си е тяхна работа.

Това се доближава до Кактус на Апаче за тестване на J2EE код, ама Кактуса ми се стори прекалено сложен и реших да ходя с хоме мейд солюшън. :)

Това не заменя тестването със Селениум или нещо друго в браузъра. Защото може да има грешки в JSP (JS) кода, които няма как да се хванат тук.


Сега обмислям идеята да пусна 2 клиента, които да са синхронизирани и да тестват логиката по едновременно обновяване на един и същ обект.



Цялата тема
ТемаАвторПубликувано
* TDD употреба Дeшeв   08.11.08 17:07
. * Re: TDD употреба Eвлaмпи Пoпдимитpoв   08.11.08 23:36
. * Re: TDD употреба Дeшeв   09.11.08 22:37
. * Re: TDD употреба Eвлaмпи Пoпдимитpoв   11.11.08 00:24
. * Re: TDD употреба пpocтo1чoвek   11.11.08 11:42
. * Re: TDD употреба [Бoби]   10.11.08 00:00
. * Re: TDD употреба lndependent   10.11.08 01:11
. * Re: TDD употреба [Бoби]   10.11.08 09:11
. * Re: TDD употреба lndependent   10.11.08 21:11
. * Re: TDD употреба mlee   10.11.08 22:00
. * Re: TDD употреба Лaнc Линk - тaйният areнт   11.11.08 13:18
. * Re: TDD употреба mlee   11.11.08 13:41
. * Re: TDD употреба Лaнc Линk - тaйният areнт   12.11.08 15:55
. * Re: TDD употреба lndependent   11.11.08 16:21
. * Re: TDD употреба Mr T   11.11.08 16:36
. * Re: TDD употреба mlee   11.11.08 16:38
. * Re: TDD употреба Mr T   11.11.08 16:46
. * Re: TDD употреба mlee   11.11.08 16:52
. * Re: TDD употреба Mr T   11.11.08 17:02
. * Re: TDD употреба lndependent   11.11.08 18:41
. * Re: TDD употреба Mr T   11.11.08 18:45
. * Re: TDD употреба Everybody loves lT   11.11.08 18:48
. * Re: TDD употреба Eвлaмпи Пoпдимитpoв   11.11.08 23:44
. * Re: TDD употреба Лaнc Линk - тaйният areнт   12.11.08 16:08
. * Re: TDD употреба Eвлaмпи Пoпдимитpoв   14.11.08 00:06
. * Re: TDD употреба Лaнc Линk - тaйният areнт   12.11.08 16:06
. * Re: TDD употреба Mr T   12.11.08 16:24
. * На точно обратното мнение съм Лaнc Линk - тaйният areнт   12.11.08 16:03
. * Re: TDD употреба Лaнc Линk - тaйният areнт   11.11.08 13:20
. * Re: TDD употреба Mr T   11.11.08 16:33
. * Re: TDD употреба Лaнc Линk - тaйният areнт   12.11.08 16:09
. * Re: TDD употреба Лaнc Линk - тaйният areнт   10.11.08 14:57
. * Re: TDD употреба lndependent   10.11.08 21:23
. * Re: TDD употреба Лaнc Линk - тaйният areнт   11.11.08 13:11
. * Re: TDD употреба buendia   11.11.08 13:50
. * Re: TDD употреба lndependent   11.11.08 16:18
. * Re: TDD употреба mlee   11.11.08 16:37
. * Re: TDD употреба Everybody loves lT   11.11.08 17:19
. * Re: TDD употреба mlee   11.11.08 17:21
. * Re: TDD употреба Mr T   11.11.08 17:33
. * Re: TDD употреба mlee   11.11.08 20:37
. * Re: TDD употреба Mr T   12.11.08 07:13
. * Re: TDD употреба mlee   12.11.08 08:04
. * Re: TDD употреба Mr T   12.11.08 16:50
. * Re: TDD употреба mlee   12.11.08 22:31
. * Re: TDD употреба q_   13.11.08 11:30
. * Re: TDD употреба Дeшeв   13.11.08 22:31
. * Re: TDD употреба q_   14.11.08 13:32
. * Re: TDD употреба lndependent   18.11.08 17:24
. * Re: TDD употреба Everybody loves lT   11.11.08 18:40
. * Re: TDD употреба Лaнc Линk - тaйният areнт   12.11.08 16:14
. * Re: TDD употреба Mr T   12.11.08 16:38
. * Re: TDD употреба Kopчeв   14.11.08 00:02
. * Re: TDD употреба Лaнc Линk - тaйният areнт   14.11.08 13:50
. * Re: TDD употреба Дeшeв   14.11.08 15:32
. * Re: TDD употреба Лaнc Линk - тaйният areнт   15.11.08 10:49
. * Re: TDD употреба Kopчeв   14.11.08 00:13
. * Re: TDD употреба Лaнc Линk - тaйният areнт   14.11.08 13:49
. * Re: TDD употреба Kopчeв   14.11.08 23:49
. * Re: TDD употреба Лaнc Линk - тaйният areнт   15.11.08 10:57
. * Re: TDD употреба wqw   15.11.08 11:12
. * Re: TDD употреба Лaнc Линk - тaйният areнт   18.11.08 13:11
. * Re: TDD употреба Дeшeв   15.11.08 12:56
. * Re: TDD употреба Лaнc Линk - тaйният areнт   18.11.08 13:20
. * Re: TDD употреба lndependent   18.11.08 17:15
. * Re: TDD употреба Лaнc Линk - тaйният areнт   18.11.08 17:45
. * Re: TDD употреба lndependent   19.11.08 00:54
. * Re: TDD употреба Лaнc Линk - тaйният areнт   19.11.08 14:51
. * Re: TDD употреба Eвлaмпи Пoпдимитpoв   17.11.08 00:26
. * Re: TDD употреба Kopчeв   12.11.08 01:11
. * Re: TDD употреба Бorдaнoв   14.11.08 19:25
. * Re: TDD употреба RealGuru   19.11.08 16:17
. * Re: TDD употреба lndependent   20.11.08 16:49
. * Re: TDD употреба Дeшeв   20.11.08 22:17
. * Re: TDD употреба lndependent   20.11.08 23:17
. * Re: TDD употреба q_   21.11.08 09:01
. * Re: TDD употреба Дeшeв   20.11.08 22:15
. * Re: TDD употреба RealGuru   21.11.08 17:38
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.