čtvrtek 14. července 2005

Pisces - komplexní testovací scénáře

Když jsem na začátku týdne ladil chyby v Luntclipse (Eclipse plugin pro Luntbuild), byl jsem vystaven do situace, do které se dostane většina vývojářů. U mě vše samozřejmě fungovalo, ale několik lidí mi hlásilo opravdu zvláštní chyby.

Nakonec se ukázalo, že problém je někde mezi Java 5.0 a Hessianem. Jenom dodám, že Hessian je web service protokol, přes který je vyexportované API Luntbuildu pro vzdálené volání. Během testování Luntclipse jsem na nic nenarazil, protože používám Javu 1.4.2. Nějakou dobu jsem si potom pohrával s myšlenkou jak podobným botám předcházet.

Samozřejmě mě napadlo použít jUnit test, ale zůstávala otázka jak ten test pustit na různých prostředích z hlediska Javy? Dnes jsem narazil na projekt Pisces díky článku Amira Shevata Taking JUnit Out of the Box.

Project Pisces is an innovative open source project that extends the JUnit framework. Like many other extensions, Pisces adds functionality to JUnit while keeping the way you use it exactly the same.

At the heart of Pisces lies the ability to run JUnit tests on a remote JVM on the same computer, or on a separate one. These remote tests are wrapped in JUnit tests that are run locally

Koncept Piscese se sestává ze dvou části Agenta a Test Wrapperu. Agent (stand alone java program) běží na destinaci, kterou chceme otestovat. V mém případě bych pustil jednoho agenta na Jave 1.5 a dalšího na Jave 1.4.2 lhostejno zda na stejném počítači či na jiném. Test Wrapper (třídá RemoteTestCase rozšiřuje TestCase) je obal pro třídu s vaším testem (testy), který umožňuje nastavit jméno agenta, na kterém se test spustí.

Takto připravený Test Wrapper či skupina se pustí jako klasický Junit test nejvhodněji přes TestSuite. Zmíněný článek to i s obrázky velice pěkně popisuje, doporučuji vřele pročíst. Pikantnost na závěr, při ladění Luntclipse mi poskytoval neocenitelný feedback Alex Popescu, který je vývojářem testing frameworku TestNG (viz Jablok a Testování nové generace), který je přímou konkurencí jUnit.