Maven Surefire

Surefire tries to instantiate nested TestCase classes

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Duplicate
  • Affects Version/s: 2.0 (2.2 plugin)
  • Fix Version/s: None
  • Labels:
    None
  • Environment:
    Windows XP, Java 1.4.2
  • Complexity:
    Intermediate
  • Number of attachments :
    0

Description

If a JUnit TestCase contains any kind of nested class (static or not), Surefire feels obliged to try and instantiate it. This will fail with access violations if the class is not public.

Work around seems to be to make the nested class public, but surely Surefire has no business doing this anyway?

Here is a sample stack trace:

org.apache.maven.surefire.booter.SurefireExecutionException: Unable to instantiate POJO 'class au.com.optus.eFulfilment.sap.test.moduleTest.TestSapOrderComponent$MySapOrderComponent'; nested exception is java.lang.InstantiationException: au.com.optus.eFulfilment.sap.test.moduleTest.TestSapOrderComponent$MySapOrderComponent; nested exception is org.apache.maven.surefire.testset.TestSetFailedException: Unable to instantiate POJO 'class au.com.optus.eFulfilment.sap.test.moduleTest.TestSapOrderComponent$MySapOrderComponent'; nested exception is java.lang.InstantiationException: au.com.optus.eFulfilment.sap.test.moduleTest.TestSapOrderComponent$MySapOrderComponent
org.apache.maven.surefire.testset.TestSetFailedException: Unable to instantiate POJO 'class au.com.optus.eFulfilment.sap.test.moduleTest.TestSapOrderComponent$MySapOrderComponent'; nested exception is java.lang.InstantiationException: au.com.optus.eFulfilment.sap.test.moduleTest.TestSapOrderComponent$MySapOrderComponent
java.lang.InstantiationException: au.com.optus.eFulfilment.sap.test.moduleTest.TestSapOrderComponent$MySapOrderComponent
at java.lang.Class.newInstance0(Class.java:293)
at java.lang.Class.newInstance(Class.java:261)
at org.apache.maven.surefire.testset.PojoTestSet.<init>(PojoTestSet.java:52)
at org.apache.maven.surefire.junit.JUnitDirectoryTestSuite.createTestSet(JUnitDirectoryTestSuite.java:61)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:93)
at org.apache.maven.surefire.Surefire.createSuiteFromDefinition(Surefire.java:147)
at org.apache.maven.surefire.Surefire.run(Surefire.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:225)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:747)

Issue Links

Activity

Hide
Stephen Coy added a comment -

I suspect that these are closely related issues

Show
Stephen Coy added a comment - I suspect that these are closely related issues
Hide
Karl Wettin added a comment -

I just hit this.

Could not find anything about it, so I just excluded all inner classes:

<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <excludes>
                    	<exclude>**/*$*</exclude>
                    </excludes>                    	
                </configuration>
            </plugin>

I know this is not the forum, but as you notice I'm already at it: it would be nice if I could configure Surefire to what combinations of test scemes (ng, junit, pojo) to run. I need to exclude a lot of pojos now..

Show
Karl Wettin added a comment - I just hit this. Could not find anything about it, so I just excluded all inner classes:
<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <excludes>
                    	<exclude>**/*$*</exclude>
                    </excludes>                    	
                </configuration>
            </plugin>
I know this is not the forum, but as you notice I'm already at it: it would be nice if I could configure Surefire to what combinations of test scemes (ng, junit, pojo) to run. I need to exclude a lot of pojos now..
Hide
Dan Fabulich added a comment -

Duplicate of surefire-44, fixed and integration tested.

Show
Dan Fabulich added a comment - Duplicate of surefire-44, fixed and integration tested.

People

Vote (3)
Watch (3)

Dates

  • Created:
    Updated:
    Resolved: