[
http://jira.codehaus.org/browse/SUREFIRE-116?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_86270
]
Will Currie commented on SUREFIRE-116:
--
I needed to get the forkMode=always option to work with a Junit TestCase that
has a suite() method. It appeared that JUnitTestSet was not setting the
classloader properly when it was building up the list of things to fork. I was
getting the following when trying to run MyTest (foo.properties was in
target/test-classes):
Caused by: org.apache.maven.surefire.booter.SurefireBooterForkException:
foo.MyTest; nested exception is java.io.FileNotFoundException: class path
resource [foo.properties] cannot be opened because it does not exist; nested
exception is org.apache.maven.surefire.testset.TestSetFailedException:
foo.MyTest; nested exception is java.io.FileNotFoundException: class path
resource [foo.properties] cannot be opened because it does not exist
at
org.apache.maven.surefire.booter.SurefireBooter.getTestSets(SurefireBooter.java:398)
at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesForkPerTestSet(SurefireBooter.java:337)
at
org.apache.maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:201)
at
org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:398)
... 18 more
Caused by: org.apache.maven.surefire.testset.TestSetFailedException:
foo.MyTest; nested exception is java.io.FileNotFoundException: class path
resource [foo.properties] cannot be opened because it does not exist
at
org.apache.maven.surefire.junit.JUnitTestSet.getTestCount(JUnitTestSet.java:260)
at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:101)
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:585)
at
org.apache.maven.surefire.booter.SurefireBooter.getTestSets(SurefireBooter.java:386)
... 21 more
Caused by: java.io.FileNotFoundException: class path resource [foo.properties]
cannot be opened because it does not exist
at
org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:135)
at foo.MyTest.suite(MyTest.java:86)
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:585)
at
org.apache.maven.surefire.junit.JUnitTestSet.createInstanceFromSuiteMethod(JUnitTestSet.java:177)
at
org.apache.maven.surefire.junit.JUnitTestSet.constructTestObject(JUnitTestSet.java:137)
at
org.apache.maven.surefire.junit.JUnitTestSet.getTestCount(JUnitTestSet.java:244)
... 27 more
I made the following to change to JUnitTestSet in the 2.3-SNAPSHOT and the
problem appears solved:
---
surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitTestSet.java
(revision 498497)
+++
surefire-providers/surefire-junit/src/main/java/org/apache/maven/surefire/junit/JUnitTestSet.java
(working copy)
@@ -174,7 +174,14 @@
if ( Modifier.isPublic( suiteMethod.getModifiers() ) &&
Modifier.isStatic( suiteMethod.getModifiers() ) )
{
-testObject = suiteMethod.invoke( null, EMPTY_CLASS_ARRAY );
+ClassLoader previousLoader =
Thread.currentThread().getContextClassLoader();
+try {
+Thread.currentThread().setContextClassLoader(
testClass.getClassLoader() );
+
+testObject = suiteMethod.invoke( null, EMPTY_CLASS_ARRAY );
+} finally {
+Thread.currentThread().setContextClassLoader(
previousLoader );
+}
}
}
catch ( NoSuchMethodException e )
How do I go about submitting this as a patch?
> [regression] Test-resources not on classpath in forkMode always
> ---
>
> Key: SUREFIRE-116
> URL: http://jira.codehaus.org/browse/SUREFIRE-116
> Project: Maven Surefire
> Issue Type: Bug
>Affects Versions: 2.0 (2.2 plugin)
>Reporter: Geoffrey De Smet
> Fix For: 2.3
>
>
> Before surefire plugin 2.2 at spring-richclient:
> - our build succeeded
> - ValidationResultsTests worked
> - true due to an unrelated testcase:
> HandlerTest
> - pertest
> Since 2.2:
> - our build failes
> - ValidtorResultTests failed too
> - while