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

Nested causes conflated with wrapper exception

    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

            People

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

              Dates

                Created:
                Updated:
                Resolved: