Мен тестілеу арқылы бағдарламалық қамтамасыз етуді әзірлеу принципінің қызу жақтаушысымын (тестілеу арқылы әзірлеу – TDD). Нил Форд (The Productive Programmer авторы) «тексерілмеген кодты жазу – бұл кәсіби жауапсыздық» деп дәлелдейді (Ресурстарды қараңыз). Майкл Фэтерс, «Мұраланған кодпен тиімді жұмыс істеу» кітабының авторы, бұрынғы кодты сынақтары жоқ кез келген код ретінде анықтайды. Бұдан шығатыны, кодты тестісіз жазу ескі тәжірибе. Өз басым, кез келген жобада өндіріске жіберілетін кодтың әрбір жолы үшін сынақ кодының екі жолы болуы керек деп дауласудан жалықпаймын.
Explore Grails сериясындағы мақалалар әлі күнге дейін TDD тақырыбына тоқталған жоқ, өйткені басты назар Grails негізгі функционалдығын пайдалану жолдарына аударылды. Инфрақұрылымдық кодты сынаудың артықшылықтары бар (яғни, сіз жазбаған код), бірақ іс жүзінде мен мұны сирек істеуім керек. Grails менің POGO нысандарымды XML форматына дұрыс сериялайтынына және trip.save() шақырылған кезде Trip нысанын дерекқорға сақтайтынына сенімдімін. Негізінде, тестілеу қажеттілігі өзіңіздің кодыңыздың өнімділігін тексеру кезінде туындайды. Күрделі алгоритмді жүзеге асыру кезінде алгоритмнің күтілгендей жұмыс істейтініне көз жеткізу үшін бір немесе бірнеше бірлік сынақтарын жасау керек. Бұл мақалада қолданбаларыңыз үшін сынақ кодын жасау үшін Grails қамтамасыз ететін құралдар түсіндіріледі.
Сіздің алғашқы сынағыңыз
Осы серия туралы
Grails — Spring және Hibernate сияқты таныс Java™ технологияларын пайдалануды конфигурациядан асып кету сияқты заманауи тәсілдермен біріктіретін веб-қосымшаны әзірлеу жүйесі. Grails сценарий тілінің икемділігі мен динамизмін қоса отырып, Java кодымен үздіксіз интеграцияны қамтамасыз ететін Groovy тілінде жазылған. Grails-ті меңгеру сіздің веб-қосымшаларды әзірлеу туралы ойыңызды мәңгілікке өзгертеді.
Біз тестілеу мәселелерін қарастыруды жаңа үлгі класын жасау арқылы бастаймыз. Бұл класс белгілі бір функционалдылықты жүзеге асырады, бірақ оны сынақсыз өндіріске енгізу мүмкін емес. Листинг 1-де көрсетілгендей, домен класын құру HotelStay пәрменін іске қосыңыз.
Листинг 1. HotelStay класын жасау
$ Grails HotelStay домен класын жасайды
Қоршаған ортаның дамуы
[copy] 1 файл /src/trip-planner2/grails-app/domain файлына көшірілуде
HotelStay үшін домен класы жасалды
[copy] 1 файлды /src/trip-planner2/test/integration ішіне көшіру
HotelStay үшін сынақтар жасалды
1-тізімде көріп отырғаныңыздай, осы пәрменге жауап ретінде Grails grails-app/domain каталогында бос үлгі класын жасайды. Ол сондай-ақ бос testSomething() әдісімен сынақ/интеграция каталогында GroovyTestCase сыныбын жасайды (төменде бірлік пен біріктіру сынақтары арасындағы айырмашылықты түсіндіремін). Жасалған сынағы бар бос HotelStay сыныбы 2-тізімде көрсетілген.
Листинг 2. Бос сынып және автоматты түрде жасалған сынақ
класс қонақүйінде тұру {
}
Class HotelStayTests GroovyTestCase кеңейтеді {
void testSomething() {
}
}
GroovyTestCase сыныбы — JUnit 3.x бірлік сынақтарының айналасындағы жұқа Groovy орауыш. Егер сіз JUnit жүйесіндегі TestCase сыныбымен таныс болсаңыз, GroovyTestCase қалай жұмыс істейтінін бұрыннан білесіз деп болжауға болады. Қалай болғанда да, тестілеу — бұл кодтың дәл өзі істеу керек нәрсені жасайтынына көз жеткізу. Бұл JUnit ұсынатын assertEquals, assertTrue, assertNull және т.б. сияқты әртүрлі басқару әдістерін қолдану арқылы бағдарламалық түрде жасалады.
Неліктен 4.x емес, JUnit 3.x?
GroovyTestCase сыныбы тарихи себептерге байланысты TestCase файлын JUnit 3.x ішінен мұралайды. 2007 жылдың қаңтарында шыққан Groovy бірінші нұсқасы Java 1.4 тіл конструкцияларына қолдау көрсетті. Қолданбаларды JVM 1.4, 1.5 және 1.6 нұсқаларында іске қосуға болатынына қарамастан, тіл синтаксисі деңгейіндегі үйлесімділік Java 1.4 деңгейінде қалды.
Groovy бағдарламасының келесі негізгі шығарылымы 2008 жылдың қаңтарында шығарылған 1.5 нұсқасы болды. Ол генериктерді, статикалық импорттарды, for/in циклдерін және аннотацияларды (JUnit контекстінде ең маңызды болып табылатын) қоса алғанда, барлық 1.5 тілдік құрылымдарды қолдайды. Дегенмен, Groovy 1.5 негізіндегі қолданбалар әлі де JVM 1.4 жүйесінде жұмыс істейді. Groovy әзірлеушілері Groovy 1.x барлық нұсқалары Java 1.4 нұсқасымен кері үйлесімді болады деп уәде берді. Бұл талап 2009 немесе 2010 жылдың соңында күтілетін Groovy 2.0 нұсқасымен жойылуы мүмкін.
Мұның бәрі GroovyTestCase негізгі сыныптарының JUnit нұсқасына қандай қатысы бар? JUnit 4.x @test , @before және @after аннотацияларын пайдаланады. Бұл мүмкіндіктер әрине қызықты, бірақ Java 1.4 нұсқасымен кері үйлесімділік себебінен JUnit 3.x әлі де GroovyTestCase үшін негіз ретінде таңдалды.
Дегенмен, JUnit 4.x пайдалануыңызға ештеңе кедергі келтірмейді (осы тақырып бойынша Groovy құжаттамасына сілтеме алу үшін Ресурстарды қараңыз). Сол сияқты, сіз Java 5 мүмкіндіктерін пайдаланатын басқа сынақ құрылымдарын пайдалана аласыз (Groovy ішіндегі TestNG мысалын Ресурстарды қараңыз). Groovy байт-код деңгейінде Java-мен үйлесімді, сондықтан сіз Groovy-де Java-дағы сияқты тестілеу құралдарын пайдалана аласыз.
Listing 3 мазмұнын grails-app/domain/HotelStay.groovy және test/integration/HotelStayTests.groovy қосыңыз.