You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by "J. Matthew Pryor" <jm...@mobiquity.net> on 2006/11/12 13:08:21 UTC

Current state of play with maven 2 & junit 4.1

I hope someone can spare me some time to clear up my investigations.

I am porting from maven 1 to maven 2, and we had begun using junit 4.1 
by using the JUnit4TestAdapter like so:

    /**
     * Wrap the new junit4 testcase in a 3.x style suite
     * to be recognized by eclipse runner and maven surefire.
     * @return
     */
    public static junit.framework.Test suite() {
        return new JUnit4TestAdapter(MyTest.class);
    }

This worked fine for maven 1 and since I didn't know any better, was 
ported over to maven 2, where it *MOSTLY* works.

I say mostly, because there are 2 out of about 80 classes don't get any 
tests detected in them i.e.

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 13.595 sec


even though they look almost identical to other classes that do have 
tests detected & run.

 From reading around, it looks like I am between a rock & a hard place 
because http://jira.codehaus.org/browse/MSUREFIRE-131 would imply the 
approach above shouldn't work (well it doesn't seem to all the time) but 
http://jira.codehaus.org/browse/MSUREFIRE-84 would imply that native 
junit 4 support is not baked properly either.

I'd rather not go to a temporary solution like 
http://www.unto.net/wiki/Maven_JUnit4_plugin if I don't have to.

Any insights, work-arounds of corrections would be greatly appreciated

Matthew

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: Current state of play with maven 2 & junit 4.1

Posted by "Alan D. Salewski" <as...@healthmarketscience.com>.
On Sun, Nov 12, 2006 at 11:08:21PM +1100, J. Matthew Pryor spake thus:
*snip*
> I am porting from maven 1 to maven 2, and we had begun using junit 4.1 
> by using the JUnit4TestAdapter like so:
*snip*
> This worked fine for maven 1 and since I didn't know any better, was 
> ported over to maven 2, where it *MOSTLY* works.
> 
> I say mostly, because there are 2 out of about 80 classes don't get any 
> tests detected in them i.e.
*snip*
> From reading around, it looks like I am between a rock & a hard place 
> because http://jira.codehaus.org/browse/MSUREFIRE-131 would imply the 
> approach above shouldn't work (well it doesn't seem to all the time) but 
> http://jira.codehaus.org/browse/MSUREFIRE-84 would imply that native 
> junit 4 support is not baked properly either.
> 
> I'd rather not go to a temporary solution like 
> http://www.unto.net/wiki/Maven_JUnit4_plugin if I don't have to.
> 
> Any insights, work-arounds of corrections would be greatly appreciated

We've had good results using a slightly modified version of the patches
attached to SUREFIRE-31 by Karl M. Davis:

    http://jira.codehaus.org/browse/SUREFIRE-31#action_76833

We basically made an internal version of the surefire plugin (based on a
patched version of the svn code from 2006-10-11) for projects that use
JUnit-4.x.

As for your 2 out of 80 classes not having their JUnit-4.x tests
detected, this may be due to the behavior of the default surefire
plugin: it attempts to run as tests anything that looks like a junit-3.x
test, a TestNG test, or a non-framework-related unit test (methods named
test*()). It may be that your unit tests are not being run by the
provider you think they are. A simple way to test this would be to add
(to one of your classes where no unit tests are detected) methods that
print something recognizable to stderr:

    * a JUnit-4.x style @Before method

    * a JUnit-4.x style @Test annotated method named doFoo() [that is,
       /not/ named testFoo()]

    * a method named testJunk()

I suspect that you'll see the output from testJunk() only. More to the
point, using a patched version of the surefire plugin is the only
solution I've seen that supports JUnit-4.x completely. In this case,
"completely" means "completely for my purposes" as I've not tested every
JUnit-4.x feature using our patched version, but I have tested these
behaviors:

    * Exceptions in @BeforeClass, @Before, @AfterClass, and @After
      methods are detected and reported (they fail the tests)

    * Methods annotated with @Test, and /only/ those methods, are
      treated as unit test methods (regardless of the method name)

HTH,
-Al

-- 
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
::
Alan D. Salewski
Software Developer
Health Market Science, Inc.
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
:: 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org