[ http://jira.codehaus.org/browse/MSUREFIRE-119?page=all ]
Kenney Westerhof closed MSUREFIRE-119.
--------------------------------------
Assignee: Kenney Westerhof
Resolution: Fixed
Fixed in revision 488512.
> Surefire plugin throws NoSuchMethodException when errors occur during
> TestSetup decorator
> -----------------------------------------------------------------------------------------
>
> Key: MSUREFIRE-119
> URL: http://jira.codehaus.org/browse/MSUREFIRE-119
> Project: Maven 2.x Surefire Plugin
> Issue Type: Bug
> Affects Versions: 2.2
> Reporter: Dan Fabulich
> Assigned To: Kenney Westerhof
> Fix For: 2.3
>
> Attachments: setup-bug.zip
>
>
> I've included an example maven project, "setup-bug.zip". It was created by
> doing "mvn archetype:create -DgroupId=com.mycompany.app
> -DartifactId=setup-bug" and then modifying AppTest.java to use a "TestSetup"
> decorator.
> Normally JUnit runs your setUp()/tearDown() methods once for every test
> method... so if you've got a TestCase with methods testFoo and testBar, JUnit
> will normally run like this: setUp testFoo tearDown setUp testBar tearDown.
> You can use a TestSetup decorator to run your setUp function just once for
> the class: TestSetup.setUp testFoo testBar TestSetup.tearDown.
> In the example given, the test's setup method throws a RuntimeException (as
> tests sometimes do). Instead of handling this gracefully, Maven Surefire
> throws a NoSuchMethodException as it attempts to call .getName() on the
> TestSetup object (which isn't guaranteed to have a name).
> Running com.mycompany.app.AppTest
> org.apache.maven.surefire.booter.SurefireExecutionException:
> com.mycompany.app.AppTest; nested exception is
> java.lang.reflect.UndeclaredThrowableException: null; nested exception is
> org.apache.maven.surefire.testset.TestSetFailedException:
> com.mycompany.app.AppTest; nested exception is
> java.lang.reflect.UndeclaredThrowableException: null
> org.apache.maven.surefire.testset.TestSetFailedException:
> com.mycompany.app.AppTest; nested exception is
> java.lang.reflect.UndeclaredThrowableException: null
> java.lang.reflect.UndeclaredThrowableException
> at $Proxy0.addError(Unknown Source)
> at junit.framework.TestResult.addError(TestResult.java:36)
> at junit.framework.TestResult.runProtected(TestResult.java:133)
> at junit.extensions.TestSetup.run(TestSetup.java:23)
> 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.junit.JUnitTestSet.execute(JUnitTestSet.java:210)
> at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:135)
> at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:122)
> at org.apache.maven.surefire.Surefire.run(Surefire.java:129)
> 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)
> Caused by: java.lang.NoSuchMethodException:
> com.mycompany.app.AppTest$AppTestSetup.getName()
> at java.lang.Class.getMethod(Class.java:986)
> at
> org.apache.maven.surefire.junit.TestListenerInvocationHandler.getStackTraceWriter(TestListenerInvocationHandler.java:171)
> at
> org.apache.maven.surefire.junit.TestListenerInvocationHandler.handleAddError(TestListenerInvocationHandler.java:160)
> at
> org.apache.maven.surefire.junit.TestListenerInvocationHandler.invoke(TestListenerInvocationHandler.java:134)
> ... 18 more
> [INFO]
> ------------------------------------------------------------------------
> [ERROR] BUILD FAILURE
> [INFO]
> ------------------------------------------------------------------------
> You can workaround this by hardcoding a public String getName() method on the
> TestSetup object and ensuring that it's public.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira