Hi all I have problem when using cobertura with cactus. I run the test and flush the result fine. Here is the output log of Weblogic Server: *Flushing results...* *Flushing results done* *Cobertura: Loaded information on 23 classes.* *Cobertura: Saved information on 23 classes.* *Flushing results...* *Flushing results done* *Cobertura: Loaded information on 23 classes.* *Cobertura: Saved information on 23 classes.* *Query is null* *Total size is 88* *First result is 0* *maxRows is 25* *result size is 25* *Flushing results...* *Flushing results done* *Cobertura: Loaded information on 23 classes.* *Cobertura: Saved information on 23 classes.* *Query is null* *Total size is 10* *First result is 0* *maxRows is 25* *result size is 10* *Flushing results...* *Flushing results done* *Cobertura: Loaded information on 23 classes.* *Cobertura: Saved information on 23 classes.* * * So the result is flushed but when the coverage report is generated, I always get 0% coverage. And according to the Cobertura FAQ, there will be cobertura.ser file in the working directory of server(WLHOME/server/bin) but I can't find it there. ( I add the code from FAQ to tearDown() methods of test cases so that server need not to shutdown to flush the result:
try { String className = "net.sourceforge.cobertura.coveragedata.ProjectData"; String methodName = "saveGlobalProjectData"; Class saveClass = Class.forName(className); java.lang.reflect.Method saveMethod = saveClass.getDeclaredMethod(methodName, new Class[0]); saveMethod.invoke(null,new Object[0]); } catch (Throwable t) { } ) Any suggestion? What did I do wrong? Here is part of my build.xml file: <target name="intrument-classes-for-coverage-testing" depends="move-toplink-files-to-deployment-folder, compile-gems" > <echo message="--instrumenting classes--" /> <!-- delete the cobertura file which contain the info of instrumented classes --> <delete file="${basedir}/cobertura.ser" /> <cobertura-instrument > <fileset dir="${classes.dir}"> <include name="**" /> </fileset> </cobertura-instrument> <!-- generated cobertura.ser is at base by default --> </target> ... <target name="package-gems-ejb" depends="intrument-classes-for-coverage-testing" description="compiles and packages the gems ejb jar file"> <echo message="--- Packaging gems ejb ---"></echo> <delete file="${gems.ejb.file}"/> <jar destfile="${gems.ejb.file}"> <fileset dir="${classes.dir}"> <include name="**"/> </fileset> <fileset dir="${gems.base.dir}"> <include name="toplink\DAPS\descriptors\*.xml"/> </fileset> <metainf dir="${gems.source.dir}/META-INF"> <include name="*.xml"/> </metainf> <manifest> <attribute name="Class-Path" value="${search.jar.file.name} commons-logging.jar cobertura.jar" /> </manifest> </jar> </target> <target name="package-gems-ear-for-apps-server" description="compiles and packages the ear file, " depends="package-gems-ejb"> <echo message="${gems.ear.file}" /> <delete file="${gems.ear.file}"/> <ear destfile="${gems.ear.file}" appxml="${gems.config.dir}/META-INF/application.xml"> <fileset dir="${deployment.dir}"> <include name="${gems.ejb.file.name}"/> <include name="${search.jar.file.name}"/> </fileset> <fileset dir="${buildlib.dir}"> <include name="commons-logging.jar" /> </fileset> <fileset dir="${cobertura.dir}" > <include name="cobertura.jar" /> </fileset> <metainf dir="${gems.config.dir}/META-INF"> <include name="weblogic-application.xml"/> </metainf> </ear> </target> <target name="cactify-gems-ear-file" depends="package-war-file-for-gems-test-cases"> <echo message="--Cactifying ear file--" /> <cactifyear srcfile="${gems.ear.file}" destfile="${gems.cactified.ear.file}"> <cactuswar srcfile="${gems.cactus.test.war.file}" context="DapsWS-DataModel-context-root" /> </cactifyear> </target> <!-- deploy to gems-ear to application server --> <target name="deploy-cactified-gems-ear-to-app-server" depends="cactify-gems-ear-file"> <echo message="--Deploying to app server--" /> <wldeploy action="deploy" verbose="true" debug="true" name="GEMS" source="${gems.cactified.ear.file}" user="weblogic" password="weblogic1" adminurl="t3://localhost:7101" targets="DefaultServer" /> </target> <target name="move-cactus.properties" depends="deploy-cactified-gems-ear-to-app-server"> <echo message="Moving" /> <copy todir="${deployment.dir}/classes" > <fileset dir="${gems.base.dir}/classes"> <include name="cactus.properties" /> </fileset> </copy> </target> <target name="run-with-junit" depends="move-cactus.properties"> <junit printsummary="false" fork="yes" forkmode="once" > <sysproperty key="net.sourceforge.cobertura.datafile" file="${basedir}/cobertura.ser" /> <formatter type="brief" usefile="false" /> <formatter type="xml" /> <classpath location="${classes.dir}" /> <classpath location="${test.classes.dir}" /> <classpath refid="cactus.classpath" /> <classpath refid="buildlib" /> <classpath refid="testlib" /> <classpath refid="cobertura.classpath" /> <test name="packagename.TestClass" todir="${test.report.dir}"> </test> </junit> </target> <target name="generate-coverage-report"> <cobertura-report format="html" destdir="${coverage.report.dir}" srcdir="${gems.source.dir}" datafile="${basedir}/cobertura.ser" /> </target> Thank you very much.