Tomáš Piňos
22.2.2011

Proč psát javovské testy v Groovy I



Chcete začít programovat v Groovy? Máte načtenou dokumentaci a tutoriály, ale stále čekáte, až se objeví příležitost, kde Groovy použít? Chtěli byste Groovy použít na aktuálním projektu, ale kvůli různým omezením to nejde? Začněte Groovy používat už teď pro psaní testů produkčního Java kódu.

Proč se možností Groovy testů vůbec zabývat? Pokud ještě Groovy neznáte, asi váháte, co by vás k jeho použití mohlo vést. Tady je pár “killer” vlastností, které mi psaní testů ulehčují. Vytváření nových instancí:

c
def person = new Person(firstname: “Jan”, surname: “Novak”, age: 32)

…Zavolá default konstruktor třídy Person a potom settery pro vyjmenované vlastnosti. Příprava testovacích dat je s Groovy velmi jednoduchá. Implementace rozhranní “mapou”:

def accountDao = [ get: { new Account(number: “AX001”, balance: 999G) } ] as AccountDao

 …Implementace rozhranní AccountDao – metoda get vrátí uvedenou instanci, volání ostatních metod skončí NPE. Tohle je výborná zkratka pro implementaci různých testovacích stubů (nebo mocků, chcete-li). Práce s kolekcemi a closures:

def numbers = accounts.findAll { it.balance > 10000G }.collect { it.number }

…Vybere z kolekce účty se zůstatkem > 10.000 a zjistí jejich čísla. S Groovy se i docela složité operace nad kolekcemi dají zapsat jako one-liner. Přehlednosti testů to hodně přidá. Groovy je plnohodnotný, obecně použitelný jazyk a umí toho samozřejmě mnohem víc. Možnostem Groovy při psaní testů se bude podrobněji věnovat druhý díl článku. V dnešním blogu se snažím ukázat, že není problém začít Groovy používat. V příštím pokračování více popíšu, jak může Groovy výrazně ulehčit některé rutinní činnosti při psaní testů.

Co využití Groovy mění?

“To je sice hezké, že Groovy mi může psaní testů zjednodušit, ale co naše infrastruktura? Jak to do sebe zapadá? Buildíme Mavenem, Cobertura nám měří pokrytí kódu testy a používáme Sonar pro sledování různých metrik a kvality Java kódu.”

Spouštění Groovy testů Mavenem není problém – je k dispozici build plugin gmaven-plugin. Plugin je navěšený na Maven goal testCompile – takže jeho použitím říkáme Mavenu pouze to, aby Groovy testy zkompiloval. Dál už se spouští Java. Groovy zdrojáky se totiž kompilují do .class souborů a zjednodušeně tedy platí, že Groovy třídy jsou po kompilaci Java třídami. Problémem není ani použití Cobertury, z pohledu pokrytí kódu se nic nemění. I po začlenění Groovy do projektu můžeme dál bedlivě sledovat kvalitu kódu. K dispozici je např. Groovy plugin pro Sonar.

“A to budu muset kódovat v Notepadu?”

Pluginy pro práci s Groovy jsou k dispozici pro prostředí Intellij Idea, Eclipse i pro NetBeans. S podporou v Intellij Idea mám dobrou zkušenost a můžu ji doporučit. Pěkně funguje editor (code completion, formátování kódu a pod.), debugger i refactoring. Jak dobře si vaše ide s Groovy kódem poradí, závisí do značné míry na stylu kódování. Groovy je sice dynamicky typovaný jazyk, to ale neznamená, že dynamické typování musíte vždy a všude využívat. Zjednodušeně platí, že ide může mít potíže tam, kde není upřesnění datový typ. Specifikovat typy u public metod, vlastností nebo parametrů closures nejde proti duchu programování v Groovy. Kód zůstává čitelnější a ide má šanci se v něm vyznat.

Přínos psaní testů v Groovy

Začít používat nový jazyk pro celý projekt je typicky hazard, pokud s ním nemáte dost zkušeností. Začít v Groovy psát testy je konzervativní první krok. Je to výborná příležitost vyzkoušet si produktivitu vývoje v Groovy, podporu jazyka ve svém IDE a také svoji schopnost Groovy zvládat. Protože mocný nástroj v nezkušených rukách nemusí být vždy přínosem. Přitom nemusíte nic slevit ze svých požadavků na pokrytí kódu testy ani na kvalitu kódu v testech samotných.

Shrnutí

Článků o tom, proč a jak psát testy v Groovy je už na webu dost. Mou ambicí proto nebyla originalita, ale snaha šířit dobrý nápad i mezi místní komunitu. Věřím, že psát testy v Groovy je dobrý nápad, který nepřináší pro zavedené projekty větší riziko. Neříkám “Naučte se Groovy a pište v něm testy”, ale “Umíte trochu Groovy a chcete ho hned začít používat? Začněte v něm psát testy.” A co vy, máte už s Groovy nebo jiným dynamicky typovaným jazykem zkušenost? Použili jste Groovy na komerčním projektu? Psali byste v něm testy pro Java kód? Podělte se o své zkušenosti v diskuzi pod článkem.

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další
  • v6ak

    Zní to zajímavě a testy jsou místo, kde bych s dynamicky typovaným jazykem problém moc neměl. Ale přesto se u mě Groovy asi neuchytí: začínám se Scalou a Groovy by mi těžko něco významného přineslo. Se Scalou dovedu podobné věci podobně jednoduše, ale staticky.

  • peter

    vsetko pekne ale to co pises je mi uplne nanic a sice ked lakas ludi co nevedia s grrovy, tak urobit nejaky uvod (nejaky kod) ako prejst od javy na groovy pokial uz viem groovy (naucil som sa ho inde), tak toto citat nebudem, to uz budem kodovat sam

  • @peter Snažil jsem se jasně říct, že článek cílím na ty, kteří už Groovy "trochu umí", ale ještě nevidí způsob, jak ho hned začít používat. Úvod do Groovy to není, ale ani neměl být.