beckje01 / grails-code-coverage

Git Repo of the Grails Code Coverage plugin.
http://grails.org/plugin/code-coverage
16 stars 26 forks source link

Plugin not working with forked execution in Grails 2.3 #11

Open jefferysmith opened 11 years ago

jefferysmith commented 11 years ago

The code coverage report doesn't seem to get generated when using the new forked execution introduced in Grails 2.3. To reproduce the issue (tried on both windows and linux):

  1. create a new Grails 2.3.0 application
  2. create a simple domain class with a unit test
  3. install the latest code-coverage plugin (v1.2.6)
  4. run grails test-app -coverage
  5. the coverage report is not generated

As a workaround, you can turn off the forked execution and the code-coverage report is created.

The default Grails 2.3.0 settings in conf/BuildConfig.groovy for forking a new process:

grails.project.fork = [
    // configure settings for the test-app JVM, uses the daemon by default
    test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true],
    ...
]

Then the console output includes:

| Instrumenting classes for coverage     
| Instrumenting classes for coverage.    
| Instrumenting classes for coverage..   
| Instrumenting classes for coverage...  
| Instrumenting classes for coverage.... 
| Instrumenting classes for coverage.....
...
Flushing results...                           
Flushing results done                         
Cobertura: Loaded information on 54 classes.  
Cobertura: Saved information on 54 classes.   
Flushing results...                           
Flushing results done     
...                    

If you change the setting to

grails.project.fork = [
   test: false,
   ...
]

Then the console output is as follows - and the reports are generated:

| Instrumenting classes for coverage     
| Instrumenting classes for coverage.    
| Instrumenting classes for coverage..   
| Instrumenting classes for coverage...  
| Instrumenting classes for coverage.... 
| Instrumenting classes for coverage.....
...
Flushing results...                                                                                                           
Flushing results done                                                                                                         
Cobertura: Loaded information on 54 classes.                                                                                  
Cobertura: Saved information on 54 classes.                                                                                   
Done with post processing reports in 10ms                                                                                     
| Cobertura Code Coverage Complete (view reports in: E:\work\coverage-example\target\test-reports/cobertura)                                                                                                                            
Flushing results...                                                                                                           
Flushing results done 
ewrdk commented 11 years ago

The workaround works well on my local machine. It will however cause my test to crash when running on Jenkins because of classloading problems (in my case a JUnit class cannot be found).

wrschneider commented 10 years ago

I have also noticed that you will not get coverage from functional tests unless you change the fork run setting to false. functional tests are not impacted by the test setting.

beckje01 commented 10 years ago

There is not currently plans for supporting forked mode, of anyone is interested in adding support a pull request is very welcome.

jameskleeh commented 9 years ago

@beckje01 I wouldn't mind diving into this, however I really have no idea what would need changed. Can you provide a general description of what will need changed?

beckje01 commented 9 years ago

I really don't know where to start but with grails 3 this plugin is not needed. So it may not be worth the effort.