I agree that there is nothing obviously incorrect. However, do you run unit tests and acceptance tests at the same time? If so then there is a potential problem that the script will run the unit tests then the acceptance tests then check the properties. I suggest that the <if><then> not be used, instead have the test target depend on targets for unit test and acceptance test. Each of the new tasks should check the tests.* properties. I do not use <if><then>. Some would argue that it should not be used in Ant. Do you know if properties set in <if><then> will be present to the parent?
The script would look something like this: <target name="test" description="Runmning unit tests" depends="test-unit,test-acceptance"> </target> <target name="test-unit" if="${unit.test}"> <echo message="running unit tests for project ${module}" /> <junit haltonfailure="no" haltonerror="no" failureproperty="tests.failures" errorproperty="tests.errors"> <classpath> <path refid="classpath.test" /> </classpath> <formatter type="brief" usefile="false" /> <batchtest fork="yes"> <fileset dir="${src.tests}"> <include name="**/*UnitTestCase.java" /> </fileset> </batchtest> </junit> <fail if="tests.errors" message="Test errors!!!" /> <fail if="tests.failures" message="Test failed!!!"/> </target> <target name="test-acceptance" if="${acceptance.test}"> <echo message="running acceptence tests for ${module}" /> <junit haltonfailure="no" haltonerror="no" failureproperty="tests.failures" errorproperty="tests.errors"> <classpath> <path refid="classpath.test" /> </classpath> <formatter type="brief" usefile="false" /> <batchtest fork="yes"> <fileset dir="${src.tests}"> <include name="**/*AcceptenceTestCase.java" /> </fileset> </batchtest> </junit> <fail if="tests.errors" message="Test errors!!!" /> <fail if="tests.failures" message="Test failed!!!"/> </target>