Pokazywanie postów oznaczonych etykietą groovy. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą groovy. Pokaż wszystkie posty

wtorek, 10 sierpnia 2010

Pisanie testów w groovym i Netbeansie

Netbeans (nawet najnowszy 6.9.1) ma błąd, który "psuje" plik antowy jeżeli chcemy wrzucać klasy Grooviego do testów. Dostajemy na konsoli:

Compiling 1 source file to
/Users/piotrzalewski/NetBeansProjects/JavaApplication5/build/classes
compile:
/Users/piotrzalewski/NetBeansProjects/JavaApplication5/nbproject/build-impl.xml:725:
Unknown attributes [apgeneratedsrcdir, processorpath]
BUILD FAILED (total time: 5 seconds)

Zgłaszałem to jako buga na netbeans.org, został przypisany i trochę zignorowany :(. A szkoda, bo pisanie testów w Groovym jest łatwiejsze i wygodniejsze.

Postanowiłem więc mimo wsystko na tym posiedzieć i poszukać rozwiązania.
Są dwa problemy do rozwiązania:

  • 1. Nieścisłość w plikach anta.
  • 2. Wymuszenie kompilacji plików *.groovy przed testem i ich wykonanie w trakcie testu.

Dla piewszego problemu znalazłem japońskie rozwiązanie pod http://feather.cocolog-nifty.com/weblog/2010/06/netbeans69groov.html. Do pliku groovy-build.xml należy dodać definicje atrybutów:

<attribute default="${javac.processorpath}" name="processorpath"/>
            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
w sekcji makrodefinicji dla "javac".

Drugi problem był łatwiejszy i rozwiązanie w bardziej ludzkim języku: http://charliesquires.wordpress.com/2009/08/30/running-groovy-tests-in-netbeans-6-7-1/ Podany kod należy wkleić między tagi w build.xml:

<target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
        <j2seproject3:junit testincludes="**/*Test.class"/>
    </target>

    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${javac.classpath}"/>
        <groovy>
            properties."test.includes.class" = properties."test.includes".split("\\.")[0] + ".class"
        </groovy>
        <j2seproject3:junit excludes="" includes="${test.includes.class}"/>
    </target>

    <target name="-init-macrodef-junit">
        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
            <attribute default="${includes}" name="includes"/>
            <attribute default="${excludes}" name="excludes"/>
            <attribute default="**" name="testincludes"/>
            <sequential>
                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true">
                    <batchtest todir="${build.test.results.dir}">
                        <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                            <filename name="@{testincludes}"/>
                        </fileset>
                    </batchtest>
                    <classpath>
                        <path path="${run.test.classpath}"/>
                    </classpath>
                    <syspropertyset>
                        <propertyref prefix="test-sys-prop."/>
                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
                    </syspropertyset>
                    <formatter type="brief" usefile="false"/>
                    <formatter type="xml"/>
                    <jvmarg line="${run.jvmargs}"/>
                </junit>
            </sequential>
        </macrodef>
    </target>
 
A w samym tagu project dodać:
xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3"

Uff - od razu łatwiej ;)

czwartek, 6 maja 2010

Groovy, Griffon i wybór IDE

Mam nowy nieduży projekt aplikacji standalone, postawiłem więc zapoznać się przy okazji z Griffonem. Griffon (http://griffon.codehaus.org/) jest frameworkiem (1) do pisania w Groovym aplikacji w Swingu. Ma ogromne wsparcie do pisania w sposób zgodny z MVC (wzorzec projektowy Model-View-Controler) - prawie się nie da zepsuć tego wzorca korzystając z Griffona :)

Zacząłem od wyboru IDE dla Groovego i na tym trochę utknąłem. Google zwraca sporo wyników, ale większość jest dość starych - a w technologi mocno rozwijającej się wszystko się zmienia z miesiąca na miesiąc. Ludzie byli dość zgodni, że jednym z najlepszych jest na pewno IntelliJ IDEA, ale niestety jest płatne. Zostałem z Eclipsem vs. Netbeans. Z tych dwóch Netbeans jest mi bardziej znane i chyba będzie łatwiejsze w użyciu - wsparcie dla groovego jest standardowo dostępne od wersji 6.7, a właśnie niedawno pokazała się wersja 6.9Beta. Jakby dla zupełnego przekonania mnie o tym pokazała się nowa wtyczka specjalnie dla Griffona (http://blogs.sun.com/geertjan/entry/griffon_and_netbeans_ide_61) - o ile mi wiadomo Eclipse nie dorobił się jeszcze wtyczki ułatwiającej prace z Griffonem.

Instalacja wtyczki jest prosta:

- pobrałem plik zip

- rozpakowałem

- w Netbeans wybrałem Tools->Plugins, zakładka Downloaded, przycisk Add Plugins i wskazałem oba pliki *.nbm.

- klik na Install i pierwszy problem - moja wersja 6.9Beta (na MacOSX) ma wbudowane pluginy do groovego z dnia 2010-04-20, a wtyczka do griffona wymaga ich z dnia 2010-04-21 - dziwna sprawa.

- spróbuję więc z Netbeans w wersji "night build" - w końcu w tej chwili do codziennych buildów trafiają chyba tylko poprawki do wersji Beta, więc nie powinno być.

- i niestety dostaję ten sam błąd - wygląda, że w pluginie jest wpisane na stałe jaką dokładnie wersje powinien mieć Groovy Support, nowsza też odpada - dla MacOs jest to niestety nie trafione. Wpisałem komentarz na strone autora - zobaczymy jutro.

I tak skończyła się na razie "łatwa instalacja" ;)

Sprawdziłem w domu na windowsie niestety także jest to wersja inna niż wymagana przez ten plugin. Wygląda na to, że na razie tylko na Linuxie działa ;) Dopisałem o windowsie i poczekam na reakcje autora.

(1) framework - zbiór blibliotek? ktoś proponował tłumaczenie "szkielet" które chyba jest najlepsze