You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by Dan Fabulich <da...@fabulich.com> on 2007/12/07 08:35:16 UTC
Measuring integration test code coverage for a Maven plugin
I recently added a bunch of integration tests for Surefire. These
integration tests automatically fork a separate Maven process to run real
Maven builds, like the Maven core integration tests do.
This naturally led me to wonder: Does Surefire (now) have reasonable code
coverage? Specifically, which lines in Surefire were covered by unit
tests, which by integration tests, and which weren't covered at all?
I know there's a variety of handy code coverage tools that work with
Maven, allowing you to instrument classes for code coverage and run your
unit tests against the instrumented classes.
The catch in this case is that I need to somehow convince Maven to use the
instrumented version of my plugin, and not the regular "real" version of
the plugin, when I go to run my integration tests. The clover plugin, for
example, doesn't seem to want to let me do that.
[On the other hand, maybe I should just use an instrumenting JVM
instead...? Java 1.5's new java.lang.instrument would probably do the
trick, but I'm not aware of any code coverage tool that works with
j.l.instrument, and anyway I'd have to fix SUREFIRE-179 just to get it to
work... :-)]
Has anybody ever done this before? More generally, I don't think I've
ever seen an example of anyone using Maven to run multi-process
integration tests (e.g. cargo tests) and also measuring code coverage on
those integration tests. Has anyone seen a good example of this that I
could reuse?
-Dan
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org
Re: Measuring integration test code coverage for a Maven plugin
Posted by Dan Fabulich <da...@fabulich.com>.
Raphaël Piéroni wrote:
> My guess is that you should deploy your instrumented plugin in a test
> repository.
That's basically what I wound up doing.
For the record, I started by specifying a special local repository in my
setting directory.
Then I tried just using maven-clover-plugin 3.6, calling
instrumentInternal directly (which you're not supposed to do because you
risk getting cloverized stuff in your production output, though that's
exactly what I wanted to do in my case).
That didn't quite work because instrumentInternal includes a function
redirectArtifact() that changes the output jar to be blah-clover.jar; once
I commented that out and added clover as a dependency to all of my code, I
was able to run my integration tests and get a total view of my
integration test coverage.
For the record, Surefire's unit tests covered 45% of Surefire; with the
added integration tests we've covered 79.4% (87 classes, 3,323 / 4,187
elements). It also highlighted some key areas where we could add more
tests, which was exactly what I wanted.
-Dan
2007/12/7, Dan Fabulich <da...@fabulich.com>:
>
> I recently added a bunch of integration tests for Surefire. These
> integration tests automatically fork a separate Maven process to run real
> Maven builds, like the Maven core integration tests do.
>
> This naturally led me to wonder: Does Surefire (now) have reasonable code
> coverage? Specifically, which lines in Surefire were covered by unit
> tests, which by integration tests, and which weren't covered at all?
>
> I know there's a variety of handy code coverage tools that work with
> Maven, allowing you to instrument classes for code coverage and run your
> unit tests against the instrumented classes.
>
> The catch in this case is that I need to somehow convince Maven to use the
> instrumented version of my plugin, and not the regular "real" version of
> the plugin, when I go to run my integration tests. The clover plugin, for
> example, doesn't seem to want to let me do that.
>
> [On the other hand, maybe I should just use an instrumenting JVM
> instead...? Java 1.5's new java.lang.instrument would probably do the
> trick, but I'm not aware of any code coverage tool that works with
> j.l.instrument, and anyway I'd have to fix SUREFIRE-179 just to get it to
> work... :-)]
>
> Has anybody ever done this before? More generally, I don't think I've
> ever seen an example of anyone using Maven to run multi-process
> integration tests (e.g. cargo tests) and also measuring code coverage on
> those integration tests. Has anyone seen a good example of this that I
> could reuse?
>
> -Dan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
>
>
Re: Measuring integration test code coverage for a Maven plugin
Posted by Raphaël Piéroni <ra...@gmail.com>.
Hi,
I never yet seen such thing.
But i would be very interested in the answer.
My guess is that you should deploy your
instrumented plugin in a test repository.
Regards
Raphaël
2007/12/7, Dan Fabulich <da...@fabulich.com>:
>
> I recently added a bunch of integration tests for Surefire. These
> integration tests automatically fork a separate Maven process to run real
> Maven builds, like the Maven core integration tests do.
>
> This naturally led me to wonder: Does Surefire (now) have reasonable code
> coverage? Specifically, which lines in Surefire were covered by unit
> tests, which by integration tests, and which weren't covered at all?
>
> I know there's a variety of handy code coverage tools that work with
> Maven, allowing you to instrument classes for code coverage and run your
> unit tests against the instrumented classes.
>
> The catch in this case is that I need to somehow convince Maven to use the
> instrumented version of my plugin, and not the regular "real" version of
> the plugin, when I go to run my integration tests. The clover plugin, for
> example, doesn't seem to want to let me do that.
>
> [On the other hand, maybe I should just use an instrumenting JVM
> instead...? Java 1.5's new java.lang.instrument would probably do the
> trick, but I'm not aware of any code coverage tool that works with
> j.l.instrument, and anyway I'd have to fix SUREFIRE-179 just to get it to
> work... :-)]
>
> Has anybody ever done this before? More generally, I don't think I've
> ever seen an example of anyone using Maven to run multi-process
> integration tests (e.g. cargo tests) and also measuring code coverage on
> those integration tests. Has anyone seen a good example of this that I
> could reuse?
>
> -Dan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
>
>