mojohaus / cobertura-maven-plugin

Cobertura Maven Plugin
https://www.mojohaus.org/cobertura-maven-plugin/
25 stars 20 forks source link

Arquillian and Cobertura: 0% percent coverage or ClassNotFoundException #25

Open gerrit-hohl opened 7 years ago

gerrit-hohl commented 7 years ago

Hello everyone, 😄

I have a working Arquillian based WildFly test within a Maven build. And now I want to add Cobertura coverage tests.

But it seems it isn't easy: If I just include Cobertura through the Cobertura Maven plugin my build fails because every class has a coverage of 0%, the tests are marked as "Error" (only during the Cobertura test execution, the normal test execution works without any problems) and I get the following error in the console:

java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/TouchCollector
Caused by: java.lang.ClassNotFoundException: net.sourceforge.cobertura.coveragedata.TouchCollector from [Module "deployment.91f93bde-a5de-4cd1-a8e4-d1174885713f.war:main" from Service Module Loader]

And if I add the Cobertura library to the deployment, I get the following error at the end of the complete testing:

Exception in thread "Thread-94" java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/ClassData
    at net.sourceforge.cobertura.coveragedata.ProjectData.getOrCreateClassData(ProjectData.java:88)
    at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:109)
    at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:272)
    at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:33)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: net.sourceforge.cobertura.coveragedata.ClassData from [Module "deployment.10d71cf1-6f23-46b2-9295-dd93eb249f3f.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
    ... 5 more

Then I get a coverage rate. But it is very ugly and the next colleague stumbling across this message will try to fix it.

Is there a way to fix that problem? I guess it's about the different class loaders and that the inner Cobertura library tries to communicate with the outer Cobertura library. But I have no clue how to solve something like that.

P.S.: I posted a similar request as a thread in the Arquillian forum. I also opened an issue in the Cobertura project.

Jroosterman commented 7 years ago

What version of Cobertura and Arquillian are you using.

mamghari commented 7 years ago

Hi everyone,

I have exactly the same issue with the version 2.7 of the maven plugin, on Java 8/Jenkins environment.

Do you have any idea why this issue happens ?

Thank you.

mamghari commented 7 years ago

I found a workaround that could be integrated into the maven plugin, I think the asm dependency should be updgraded to 5.1 in the next release.

In my pom.xml file I changed the asm version dependency from the plugin management section like following:

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>cobertura-maven-plugin</artifactId>
                    <version>${cobertura.version}</version>
                    <dependencies>  
                                        <dependency>  
                                                  <groupId>org.ow2.asm</groupId>  
                                                 <artifactId>asm</artifactId>  
                                                 <version>5.1</version>  
                                        </dependency>  
                                    </dependencies>  
                    <configuration>
                        ......
                    </configuration>
                    <executions>
                        .....
                    </executions>
                </plugin>

inpsired from http://www.befreeman.com/2014/09/getting-cobertura-code-coverage-with.html

mmarquezvacas commented 7 years ago

I'm having the same problem. I've made the "asm" plugin workaround (version 5.1) and cobertura plugin (version 2.7) doesn't recognize Arquillian tests. I get the following error: "failed coverage check. Branch coverage rate of 0.0% is below 75.0%", in all my test classes.