Better still would be to use the @Rule annotation.  Ie:

@Rule
public ExpectedException exepctedException = ExpectedException.none();

@Test
public void doSomethingThatBlowsup throws Exception
{
  expectedException.expect(SomeException.class);
  expectedException.expectMessage("Ensure message contains this string");
  doSomething();
}

The annotation is nice since you can check the string as well. And if you 
really need, you can create a matcher to check things like that cause of the 
exception etc...

But this may need java 1.6.

> -----Original Message-----
> From: Stephen Connolly [mailto:stephen.alan.conno...@gmail.com]
> Sent: Wednesday, August 03, 2011 3:22 PM
> To: dev@maven.apache.org
> Cc: comm...@maven.apache.org
> Subject: Re: svn commit: r1153562 - in /maven/sandbox/trunk/plexus-
> utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util: ExceptionUtilsTest.java
> exceptionutils/TestExceptionWithDetail.java
> 
> fyi, you may have a little inefficiency when you have an expected
> exception.
> 
> 
> @Test(expected=...)
> public void dosomethingblowsup() throws Exception {
>   dosomething();
> }
> 
> is better than
> 
> @Test
> public void dosomethingblowsup() throws Exception {
> try {
>   dosomething();
>   fail();
> } catch (...) {
>   // expected
> }
> }
> 
> unless you have further asserts to make on the expected exception.
> 
> - Stephen
> 
> ---
> Sent from my Android phone, so random spelling mistakes, random
> nonsense
> words and other nonsense are a direct result of using swype to type on
> the
> screen
> On 3 Aug 2011 17:16, <strub...@apache.org> wrote:
> > Author: struberg
> > Date: Wed Aug 3 16:16:23 2011
> > New Revision: 1153562
> >
> > URL: http://svn.apache.org/viewvc?rev=1153562&view=rev
> > Log:
> > refine ExceptionUtilsTest
> >
> > almost done now!
> >
> > Added:
> >
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> WithDetail.java
> > - copied, changed from r1153297,
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> .java
> > Modified:
> >
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
> >
> > Modified:
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
> > URL:
> http://svn.apache.org/viewvc/maven/sandbox/trunk/plexus-utils-commons-
> bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java?rev=
> 1153562&r1=1153561&r2=1153562&view=diff
> >
> =======================================================================
> =======
> > ---
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
> (original)
> > +++
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/ExceptionUtilsTest.java
> Wed Aug 3 16:16:23 2011
> > @@ -21,11 +21,14 @@ package org.codehaus.plexus.util;
> >
> > import org.apache.maven.tck.FixPlexusBugs;
> > import org.codehaus.plexus.util.exceptionutils.TestException;
> > +import
> org.codehaus.plexus.util.exceptionutils.TestExceptionWithDetail;
> > import org.junit.Rule;
> > import org.junit.Test;
> > import org.junit.Assert;
> > import org.junit.matchers.JUnitMatchers;
> >
> > +import java.io.ByteArrayOutputStream;
> > +import java.io.PrintStream;
> > import java.lang.reflect.InvocationTargetException;
> > import java.sql.SQLException;
> > import java.util.List;
> > @@ -245,7 +248,7 @@ public class ExceptionUtilsTest extends
> > // NPE safe test
> > try
> > {
> > - ExceptionUtils.getStackTrace( (Throwable) null );
> > + ExceptionUtils.getStackTrace((Throwable) null);
> > fail( "getStackTrace(null) NPE expected" );
> > }
> > catch ( NullPointerException e )
> > @@ -274,7 +277,7 @@ public class ExceptionUtilsTest extends
> > // NPE safe test
> > try
> > {
> > - ExceptionUtils.getStackFrames( (Throwable) null );
> > + ExceptionUtils.getStackFrames((Throwable) null);
> > fail( "getStackFrames(null) NPE expected" );
> > }
> > catch ( NullPointerException e )
> > @@ -315,7 +318,7 @@ public class ExceptionUtilsTest extends
> >
> > String[] stackFrames = ExceptionUtils.getStackFrames( stackTrace );
> > assertNotNull( stackFrames );
> > - assertEquals( 23, stackFrames.length );
> > + assertEquals(23, stackFrames.length);
> >
> > assertEquals( "java.lang.NullPointerException: mymessage",
> stackFrames[0]
> );
> > assertThat( "stackFrames", stackFrames[1]
> > @@ -339,8 +342,26 @@ public class ExceptionUtilsTest extends
> > @Test
> > public void testGetThrowableCount()
> > {
> > - //X TODO refine test!
> > - logger.warning("TODO implement!");
> > + NullPointerException npe = new NullPointerException( "dooh just a
> random, nullpointer" );
> > + SQLException sqlException = new SQLException( npe );
> > + TestException testException = new TestException();
> > + testException.setSourceException( sqlException );
> > +
> > + assertThat( "getThrowableCount"
> > + , ExceptionUtils.getThrowableCount( npe )
> > + , is( 1 ));
> > +
> > + assertThat( "getThrowableCount"
> > + , ExceptionUtils.getThrowableCount( sqlException )
> > + , is( 2 ));
> > +
> > + assertThat( "getThrowableCount"
> > + , ExceptionUtils.getThrowableCount( testException )
> > + , is( 3 ));
> > +
> > + // NPE safe test
> > + // this method should NOT throw a NPE on a null argument!
> > + ExceptionUtils.getThrowableCount( null );
> > }
> >
> > /**
> > @@ -350,18 +371,109 @@ public class ExceptionUtilsTest extends
> > @Test
> > public void testIndexOfThrowable()
> > {
> > - //X TODO refine test!
> > - logger.warning("TODO implement!");
> > + NullPointerException npe = new NullPointerException( "dooh just a
> random, nullpointer" );
> > + SQLException sqlException = new SQLException( npe );
> > + TestException testException = new TestException();
> > + testException.setSourceException( sqlException );
> > +
> > + assertThat("indexOfThrowable"
> > + , ExceptionUtils.indexOfThrowable(npe, NullPointerException.class)
> > + , is(0));
> > +
> > + assertThat( "indexOfThrowable for non contained Exception type"
> > + , ExceptionUtils.indexOfThrowable( npe, SQLException.class )
> > + , is( -1 ));
> > +
> > +
> > + assertThat( "indexOfThrowable"
> > + , ExceptionUtils.indexOfThrowable( testException,
> NullPointerException.class )
> > + , is( 2 ));
> > +
> > + assertThat( "indexOfThrowable for non contained Exception type"
> > + , ExceptionUtils.indexOfThrowable( testException,
> SQLException.class )
> > + , is( 1 ));
> > +
> > + assertThat( "indexOfThrowable"
> > + , ExceptionUtils.indexOfThrowable( testException,
> TestException.class )
> > + , is( 0 ));
> > +
> > +
> > + // tests for indexOfThrowable with start index param
> > + assertThat( "indexOfThrowable"
> > + , ExceptionUtils.indexOfThrowable( testException,
> NullPointerException.class, 2 )
> > + , is( 2 ));
> > +
> > + assertThat( "indexOfThrowable"
> > + , ExceptionUtils.indexOfThrowable( testException,
> SQLException.class, 2
> )
> > + , is( -1 ));
> > +
> > + try
> > + {
> > + ExceptionUtils.indexOfThrowable( testException,
> TestException.class, 3
> );
> > + fail( "indexOfThrowable with too large inces" );
> > + }
> > + catch ( IndexOutOfBoundsException e )
> > + {
> > + //nothing to do, Exception was expected
> > + }
> > +
> > + // NPE safe tests
> > + try
> > + {
> > + ExceptionUtils.indexOfThrowable( null, TestException.class );
> > + fail( "indexOfThrowable(null, Exception.class) NPE expected" );
> > + }
> > + catch ( IndexOutOfBoundsException e )
> > + {
> > + //nothing to do, Exception was expected
> > + }
> > + assertThat( "indexOfThrowable for null Exception type"
> > + , ExceptionUtils.indexOfThrowable(npe, null)
> > + , is(-1));
> > }
> >
> > /**
> > + * Most probably this only ever returns false on null in JDK > 1.4
> > + * Because Throwable itself nowadays has a getCause() method which
> > + * is in the method list...
> > + *
> > * @see ExceptionUtils#isNestedThrowable(Throwable)
> > */
> > @Test
> > public void testIsNestedThrowable()
> > {
> > - //X TODO refine test!
> > - logger.warning("TODO implement!");
> > + NullPointerException npe = new NullPointerException( "dooh just a
> random, nullpointer" );
> > + SQLException sqlException = new SQLException( npe );
> > + TestException testException = new TestException();
> > + testException.setSourceException( sqlException );
> > +
> > + assertThat( "isNestedThrowable"
> > + , ExceptionUtils.isNestedThrowable( null )
> > + , is( false ) );
> > +
> > + assertThat("isNestedThrowable"
> > + , ExceptionUtils.isNestedThrowable(npe)
> > + , is(true));
> > +
> > + assertThat( "isNestedThrowable"
> > + , ExceptionUtils.isNestedThrowable( sqlException )
> > + , is( true ) );
> > +
> > + assertThat( "isNestedThrowable"
> > + , ExceptionUtils.isNestedThrowable( new InvocationTargetException(
> npe )
> )
> > + , is( true ) );
> > +
> > + assertThat( "isNestedThrowable"
> > + , ExceptionUtils.isNestedThrowable( new TestExceptionWithDetail() )
> > + , is( true ) );
> > +
> > + assertThat( "isNestedThrowable"
> > + , ExceptionUtils.isNestedThrowable( new Exception() )
> > + , is( true ) );
> > +
> > + assertThat( "isNestedThrowable"
> > + , ExceptionUtils.isNestedThrowable( new Throwable() )
> > + , is( true ) );
> > }
> >
> > /**
> > @@ -372,8 +484,32 @@ public class ExceptionUtilsTest extends
> > @Test
> > public void testPrintRootCauseStackTrace()
> > {
> > - //X TODO refine test!
> > - logger.warning("TODO implement!");
> > + NullPointerException npe = new NullPointerException( "dooh just a
> random, nullpointer" );
> > + SQLException sqlException = new SQLException( npe );
> > + TestException testException = new TestException();
> > + testException.setSourceException( sqlException );
> > +
> > + ByteArrayOutputStream bao = new ByteArrayOutputStream();
> > + PrintStream outStream = new PrintStream( bao );
> > + PrintStream originalErr = System.err;
> > +
> > + try
> > + {
> > + System.setErr( outStream );
> > + ExceptionUtils.printRootCauseStackTrace( npe );
> > +
> > + assertThat( "stackFrames"
> > + , bao.toString()
> > + , JUnitMatchers.containsString( "java.lang.NullPointerException:
> dooh
> just a random, nullpointer"
> > + + "\n\tat org.codehaus.plexus.util.ExceptionUtilsTest."
> > + + "testPrintRootCauseStackTrace(ExceptionUtilsTest.java:" ) );
> > + }
> > + finally
> > + {
> > + System.setErr( originalErr );
> > + }
> > +
> > + //X TODO A FEW THINGS STILL MISSING! will continue later today...
> > }
> >
> > }
> >
> > Copied:
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> WithDetail.java
> (from r1153297,
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> .java)
> > URL:
> http://svn.apache.org/viewvc/maven/sandbox/trunk/plexus-utils-commons-
> bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> WithDetail.java?p2=maven/sandbox/trunk/plexus-utils-commons-
> bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> WithDetail.java&p1=maven/sandbox/trunk/plexus-utils-commons-
> bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> .java&r1=1153297&r2=1153562&rev=1153562&view=diff
> >
> =======================================================================
> =======
> > ---
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> .java
> (original)
> > +++
> maven/sandbox/trunk/plexus-utils-commons-bridge/plexus-utils-
> tck/src/test/java/org/codehaus/plexus/util/exceptionutils/TestException
> WithDetail.java
> Wed Aug 3 16:16:23 2011
> > @@ -23,36 +23,26 @@ package org.codehaus.plexus.util.excepti
> >
> >
> > /**
> > + * This test exception has a 'detail' field.
> > *
> > * @author <a href="mailto:strub...@yahoo.de";>Mark Struberg</a>
> > */
> > -public class TestException extends Exception
> > +public class TestExceptionWithDetail extends Exception
> > {
> > - private Throwable cause;
> > - private Throwable specialCause;
> > + private Throwable detail;
> >
> > - public TestException()
> > + public TestExceptionWithDetail()
> > {
> > super();
> > }
> >
> > - public void setSourceException( Throwable cause )
> > + public Throwable getDetail()
> > {
> > - this.cause = cause;
> > + return detail;
> > }
> >
> > - public Throwable getSourceException()
> > + public void setDetail( Throwable detail )
> > {
> > - return cause;
> > - }
> > -
> > - public Throwable getSpecialCause()
> > - {
> > - return specialCause;
> > - }
> > -
> > - public void setSpecialCause( Throwable specialCause )
> > - {
> > - this.specialCause = specialCause;
> > + this.detail = detail;
> > }
> > }
> >
> >

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@maven.apache.org
For additional commands, e-mail: dev-h...@maven.apache.org

Reply via email to