Mon 27 Feb 2006
building unit tests in eclipse from an ANT script for ASUnit
Posted by johannes.nel under worflowNo Comments
At work there has been a major drive towards better code, better processes and a more mature way to develop flex applications which led us to unit test with much more urgency (using ASUnit). We don't Flex Builder for Flex 1.5 (check out this tut by Darron Schall for setting up eclipse for flex)
always preferring the FDT and Oxygen. Now if you used the ASUnit create class command for the Flash IDE you would know that creating a class and its testcase was fairly simple. You pop the classname in and voila the class is created. the testcase is created and the allTests file is altered. This kind of functionality is nice, but we wanted to use it in Eclipse as well. Last year when we started down this line I contacted the great folks over at Powerflasher (the creators of FDT)and asked them if their Class Creation Wizard could link to an ANT script which it would execute directly after the class was created. Nico Zimmermann obliged (Thanks!).
I then went and wrote a python script which created testcases for all the files in a source folder, and altered the AllTest file for each of the flders beneath that as well. A problem I Immediatly ran into was my source control system (SVN) created .svn folders which i then recursed through so I just put a check in for any folders that follow the SVN naming conventions. Another issue we were facing after this was that we used external libraries like XPATH from xfactorstudio and we did not want to create unit test for these as well so Peter suggested using RegEx to filter out certain packages. Having never learnt how to use RegEx properly i come from the Alias school of RegEx ( A man had a problem, he decides to use RegEx to solve it, now he has two problems), so i just told Peter you do it, which he promptly did.
On how wo use this:
extract the .tar file into the root of your project. you have two files to worry about at this point, the classCreated.xml ANT script and the clientBuild.properties which that uses.
in clientBuild.properties which looks like this
-
src.path = ${basedir}/src
-
test.templates=${basedir}/python/templates
-
test.include = .
-
test.exclude = ^com\\.xfactorstudio
-
lib.dir=${basedir}/lib
-
base.package = com
-
pyAntTasks.jar=${lib.dir}/pyAntTasks.jar
you need to worry about the src.path variable. i keep my source in a folder called src, if its in the root of your project set it equal to ${basedir}
then you haev test.include and text.exclude which takes takes a regular expression on what to include. as you can see at the moment we are including everything whilst excluding anything in the com.xfactorstudio package.
the last variable to set is the base package. if you keep your code in a package called com it will work, if however your code is in a package called org you need to change that value to org.
you also need python set up as an enviroment variable. (in bash or your command prompt you ahve to be able to type python and it will start and show you >>>), i used python 2.4.1 and have not tested it on anything else yet, but i don't expect any problems.
current limitations:
this does not deal with multiple top level packages yet
if a class has the word interface in it a testcase does not get created for it.
this has been tested on both pc and mac.
http://xperiments.lennel.org/createTestCases.tar
i have also uploaded the templates for AS3.
http://xperiments.lennel.org/AS3templates.tar
the mxml testing stuff is pretty imature, that is a work in progress for us