I am using apache log4j in my code. Now I am trying to do the code
coverage using jacoco.
jacoco working fine without logs in code but it is errored out for loggers added in my code. i am getting below exception –
14:05:38 [junit] 14:05:38 [junit] Testcase: testValidateQwestCktIdVCID took 0.171 sec 14:05:38 [junit] Caused an ERROR 14:05:38 [junit] org/apache/log4j/Category 14:05:38 [junit] java.lang.NoClassDefFoundError: org/apache/log4j/Category 14:05:38 [junit] at com.qwest.eflow.eman.common.nwf.FOAValidationHandler.<clinit>(FOAValidationHandler.java:44) 14:05:38 [junit] at com.ant.sonar.jacoco.junit.code.coverage.JacacoCoverageTest.testValidateQwestCktIdVCID(JacacoCoverageTest.java:31) 14:05:38 [junit] Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Category 14:05:38 [junit] at java.net.URLClassLoader.findClass(URLClassLoader.java:382) 14:05:38 [junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:419) 14:05:38 [junit] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) 14:05:38 [junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:352) 14:05:38 [junit] 14:05:38 [junit] Testcase: testUncoveredMethod took 0.001 sec 14:05:38 [junit] Caused an ERROR 14:05:38 [junit] org/apache/log4j/Category 14:05:38 [junit] java.lang.NoClassDefFoundError: org/apache/log4j/Category 14:05:38 [junit] at com.ant.sonar.jacoco.junit.code.coverage.JacacoCoverage.<clinit>(JacacoCoverage.java:6)
I tried to exclude the logs by adding below code in my ant script as( <jacoco:coverage destfile="${result.exec.file}" excludes="org.apache.log4j.*"> )still it is giving me same error.
<!-- junit-coverage using jacoco -->
<!-- Step 1: Import JaCoCo Ant tasks -->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacocoant.jar.path}"/>
</taskdef>
<target name="test" depends="compile">
<jacoco:coverage destfile="${result.exec.file}" excludes="org.apache.log4j.*">
<junit showoutput="true" printsummary="on" enabletestlistenerevents="true" fork="true" haltonfailure="no" forkmode="once">
<classpath path="${result.classes.dir}"/>
<classpath path="${junit.jar.path}"/>
<classpath path="${hamcrest.jar.path}"/>
<classpath location="../../ant-junit-1.9.5.jar"/>
<formatter type="plain" usefile="false"/>
<test name="com.ant.sonar.jacoco.junit.code.coverage.JacacoCoverageTest"/>
</junit>
</jacoco:coverage>
<!-- Step 3: Create coverage report -->
<jacoco:report>
<!--
This task needs the collected execution data and ...
-->
<executiondata>
<file file="${result.exec.file}"/>
</executiondata>
<!-- the class files and optional source files ... -->
<structure name="JaCoCo Ant Example">
<classfiles>
<fileset dir="${result.classes.dir}"/>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}"/>
</sourcefiles>
</structure>
<!-- to produce reports in different formats. -->
<html destdir="${result.report.dir}"/>
<csv destfile="${result.report.dir}/report.csv"/>
<xml destfile="${result.report.dir}/report.xml"/>
</jacoco:report>
</target>
Could anyone please help me out.I am using junit 4.11 jar , ant-junit-1.9.5.jar and jacocoant.jar