Uploaded image for project: 'Maven Surefire'
  1. Maven Surefire
  2. SUREFIRE-1067

Nested causes conflated with wrapper exception

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 2.13
    • 2.19
    • Maven Surefire Plugin
    • None
    • JDK 7u51 on Linux

    Description

      I created a simple Maven project containing just a test

      package p;
      import java.io.IOException;
      import org.junit.Test;
      public class SomeTest {
          @Test public void t() throws Exception {
              try {
                  m();
              } catch (RuntimeException x) {
                  throw new IOException(x);
              }
          }
          private void m() {
              throw new UnsupportedOperationException();
          }
      }
      

      If I run this using maven-surefire-plugin 2.12.4, I get a p.SomeTest.txt with the expected output:

      -------------------------------------------------------------------------------
      Test set: p.SomeTest
      -------------------------------------------------------------------------------
      Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.037 sec <<< FAILURE!
      t(p.SomeTest)  Time elapsed: 0.009 sec  <<< ERROR!
      java.io.IOException: java.lang.UnsupportedOperationException
      	at p.SomeTest.t(SomeTest.java:9)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
      	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
      	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
      	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
      	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
      	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
      	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
      	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
      	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
      	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
      	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
      	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
      	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
      	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
      Caused by: java.lang.UnsupportedOperationException
      	at p.SomeTest.m(SomeTest.java:13)
      	at p.SomeTest.t(SomeTest.java:7)
      	... 29 more
      

      But if I use 2.13 or higher, I get

      -------------------------------------------------------------------------------
      Test set: p.SomeTest
      -------------------------------------------------------------------------------
      Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.037 sec <<< FAILURE!
      t(p.SomeTest)  Time elapsed: 0.009 sec  <<< ERROR!
      java.io.IOException: java.lang.UnsupportedOperationException
      	at p.SomeTest.m(SomeTest.java:13)
      	at p.SomeTest.t(SomeTest.java:7)
      

      which is missing the potentially crucial information about what threw the IOException and why. (Or if the wrapper exception does not follow the convention of appending ": " + cause to its own message, the Surefire output would lack any information about the detail message in the original exception.)

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            tibordigana Tibor Digana
            jglick Jesse N. Glick
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Issue deployment