| <!-- saved from url=(0014)about:internet --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> |
| <html> |
| <!-- Standard Head Part --> |
| <head> |
| <title>NUnit - Exception</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> |
| <meta http-equiv="Content-Language" content="en-US"> |
| <link rel="stylesheet" type="text/css" href="nunit.css"> |
| <link rel="shortcut icon" href="favicon.ico"> |
| </head> |
| <!-- End Standard Head Part --> |
| |
| <body> |
| |
| <!-- Standard Header for NUnit.org --> |
| <div id="header"> |
| <a id="logo" href="http://www.nunit.org"><img src="img/logo.gif" alt="NUnit.org" title="NUnit.org"></a> |
| <div id="nav"> |
| <a href="http://www.nunit.org">NUnit</a> |
| <a class="active" href="index.html">Documentation</a> |
| </div> |
| </div> |
| <!-- End of Header --> |
| |
| <div id="content"> |
| |
| <script language="JavaScript" src="codeFuncs.js" ></script> <!-- Do it this way for IE --> |
| |
| <h3>ExpectedExceptionAttribute (NUnit 2.0 plus Updates)</h3> |
| |
| <p>This is the way to specify that the execution of a test will throw an |
| exception. This attribute has a number of positional and |
| named parameters, which we will discuss in separate sections |
| according to the purpose they serve.</p> |
| |
| <h4>Specifying the Expected Exception Type</h4> |
| |
| <p>The original attribute, introduced with NUnit 2.0 took a single |
| argument giving the exact type of the expected exception. For example...</p> |
| |
| |
| <div class="code"><pre>[ExpectedException( typeof( ArgumentException ) )] |
| public void TestMethod() |
| { |
| ...</pre></div> |
| |
| <p>Beginning with NUnit 2.2.4, it became possible to specify the type |
| of exception as a string, avoiding the need for a reference to the |
| defining assembly...</p> |
| |
| <div class="code"><pre>[ExpectedException( "System.ArgumentException" ) )] |
| public void TestMethod() |
| { |
| ...</pre></div> |
| |
| <p>The above two examples function identically: the test only succeeds if a |
| System.Argument exception is thrown.</p> |
| |
| <h4>Specifying the Expected Message</h4> |
| |
| <p>NUnit 2.1 introduced a constructor with a second argument, specifying the |
| exact text of the message property of the exception. After NUnit 2.2.4, the |
| same extension was made to the constructor taking a string argument. With |
| NUnit 2.4, these arguments are marked obsolete, and a named parameter |
| is provided instead...</p> |
| |
| <div class="code" style="width: 44em"><pre>// Obsolete form: |
| [ExpectedException( typeof( ArgumentException ), "expected message" )] |
| [ExpectedException( "System.ArgumentException", "expected message" )] |
| |
| // Prefered form: |
| [ExpectedException( typeof( ArgumentException ), ExpectedMessage="expected message" )] |
| [ExpectedException( "System.ArgumentException", ExpectedMessage="expected message" )]</pre></div> |
| |
| <p>With NUnit 2.4, it is possible to specify additional tests on the |
| exception message, beyond a simple exact match. This is done using the |
| MatchType named parameter, whose argument is an enumeration, defined as |
| follows:</p> |
| |
| <div class="code"> |
| <pre>public enum MessageMatch |
| { |
| /// Expect an exact match |
| Exact, |
| /// Expect a message containing the parameter string |
| Contains, |
| /// Match the regular expression provided as a parameter |
| Regex, |
| /// Expect a message starting with the parameter string |
| StartsWith |
| }</pre></div> |
| |
| <p>The following example is for a test that passes only if an ArgumentException |
| with a message containing "unspecified" is received.</p> |
| |
| <div class="code" style="width: 57em"> |
| <pre>[ExpectedException( typeof( ArgumentException), ExpectedMessage="unspecified", MatchType=MessageMatch.Contains )] |
| public void TestMethod() |
| { |
| ...</pre></div> |
| |
| <p>If MatchType is not specified, an exact match is used as before.</p> |
| |
| <h4>Specifying a Custom Error Message</h4> |
| |
| <p>With NUnit 2.4, it is possible to specify a custom message to be |
| displayed if the ExpectedException attribute is not satisfied. This |
| is done through the UserMessage named parameter...</p> |
| |
| <div class="code" style="width: 41em"> |
| <pre>[ExpectedException( typeof( ArgumentException ), UserMessage="Custom message" )] |
| public void TestMethod() |
| { |
| ...</pre> |
| </div> |
| |
| <h4>Handling the Exception in Code</h4> |
| |
| <p>If the processing required for an exception is too complex to express |
| in the attribute declaration, the normal practice is to process it in the |
| test code using a try/catch block. As an alternative, NUnit 2.4 allows |
| designating a method that will be called to process the exception. This |
| is particularly useful when multiple exceptions need to be processed |
| in the same way.</p> |
| |
| <p>An common exception handler may be designated by implementing the |
| <b>IExpectExceptionInterface</b>, which is defined as follows...</p> |
| |
| <div class="code"> |
| <pre>public interface IExpectException |
| { |
| void HandleException( System.Exception ex ); |
| }</pre> |
| </div> |
| |
| <p>The exception handler is only called for methods marked with |
| the <b>ExpectedException</b> attribute. If all checks - including |
| the type of the exception - are to be performed in code, the |
| attribute may be specified without any arguments in order to |
| indicate that an exception is expected.</p> |
| |
| <p>An handler may be designated for a particular method |
| using the <b>Handler</b> named parameter.</p> |
| |
| <div class="code"><pre>[ExpectedException( Handler="HandlerMethod" )] |
| public void TestMethod() |
| { |
| ... |
| } |
| |
| public void HandlerMethod( System.Exception ex ) |
| { |
| ... |
| }</pre></div> |
| |
| <p>This technique may be |
| used without implementing <b>IExpectException</b> or in |
| combination with it. In the latter case, the designated handler |
| applies to any method that specifies it, while the normal |
| exception handler applies to any other methods that specify |
| an <b>ExpectedException</b>.</p> |
| |
| <p>However it is specified, the handler method should examine the exception and |
| <b>Assert</b> on whatever properties are relevant. Any resulting failure message |
| will then be consistent in format with other assertions performed in the tests.</p> |
| |
| |
| <h4>Example:</h4> |
| |
| <div class="code"> |
| |
| <div class="langFilter"> |
| <a href="javascript:Show('DD1')" onmouseover="Show('DD1')"><img src="img/langFilter.gif" width="14" height="14" alt="Language Filter"></a> |
| <div id="DD1" class="dropdown" style="display: none" onclick="Hide('DD1')"> |
| <a href="javascript:ShowCS()">C#</a><br> |
| <a href="javascript:ShowVB()">VB</a><br> |
| <a href="javascript:ShowMC()">C++</a><br> |
| </div> |
| </div> |
| |
| <pre class="cs">namespace NUnit.Tests |
| { |
| using System; |
| using NUnit.Framework; |
| |
| [TestFixture] |
| public class SuccessTests |
| { |
| [Test] |
| [ExpectedException(typeof(InvalidOperationException))] |
| public void ExpectAnExceptionByType() |
| { /* ... */ } |
| |
| [Test] |
| [ExpectedException("System.InvalidOperationException")] |
| public void ExpectAnExceptionByName() |
| { /* ... */ } |
| } |
| } |
| </pre> |
| |
| <pre class="vb">Imports System |
| Imports Nunit.Framework |
| |
| Namespace Nunit.Tests |
| |
| <TestFixture()> Public Class SuccessTests |
| <Test(), ExpectedException(GetType(Exception))> |
| Public Sub ExpectAnExceptionByType() |
| ' ... |
| End Sub |
| |
| <TestFixture()> Public Class SuccessTests |
| <Test(), ExpectedException("System.Exception")> |
| Public Sub ExpectAnExceptionByName() |
| ' ... |
| End Sub |
| End Class |
| End Namespace |
| </pre> |
| |
| <pre class="mc">#using <Nunit.Framework.dll> |
| using namespace System; |
| using namespace NUnit::Framework; |
| |
| namespace NUnitTests |
| { |
| [TestFixture] |
| public __gc class SuccessTests |
| { |
| [Test] |
| [ExpectedException(__typeof(InvalidOperationException))] |
| void ExpectAnExceptionByType(); |
| |
| [Test] |
| [ExpectedException(S"SystemInvalidOperationException")] |
| void ExpectAnExceptionByName(); |
| }; |
| } |
| |
| #include "cppsample.h" |
| |
| namespace NUnitTests { |
| // ... |
| } |
| </pre> |
| |
| </div> |
| |
| </div> |
| |
| <!-- Submenu --> |
| <div id="subnav"> |
| <ul> |
| <li><a href="index.html">NUnit 2.5.9</a></li> |
| <ul> |
| <li><a href="getStarted.html">Getting Started</a></li> |
| <li><a href="assertions.html">Assertions</a></li> |
| <li><a href="constraintModel.html">Constraints</a></li> |
| <li><a href="attributes.html">Attributes</a></li> |
| <ul> |
| <li><a href="category.html">Category</a></li> |
| <li><a href="combinatorial.html">Combinatorial</a></li> |
| <li><a href="culture.html">Culture</a></li> |
| <li><a href="datapoint.html">Datapoint(s)</a></li> |
| <li><a href="description.html">Description</a></li> |
| <li id="current"><a href="exception.html">Exception</a></li> |
| <li><a href="explicit.html">Explicit</a></li> |
| <li><a href="ignore.html">Ignore</a></li> |
| <li><a href="maxtime.html">Maxtime</a></li> |
| <li><a href="pairwise.html">Pairwise</a></li> |
| <li><a href="platform.html">Platform</a></li> |
| <li><a href="property.html">Property</a></li> |
| <li><a href="random.html">Random</a></li> |
| <li><a href="range.html">Range</a></li> |
| <li><a href="repeat.html">Repeat</a></li> |
| <li><a href="requiredAddin.html">RequiredAddin</a></li> |
| <li><a href="requiresMTA.html">Requires MTA</a></li> |
| <li><a href="requiresSTA.html">Requires STA</a></li> |
| <li><a href="requiresThread.html">Requires Thread</a></li> |
| <li><a href="sequential.html">Sequential</a></li> |
| <li><a href="setCulture.html">SetCulture</a></li> |
| <li><a href="setup.html">Setup</a></li> |
| <li><a href="setupFixture.html">SetupFixture</a></li> |
| <li><a href="suite.html">Suite</a></li> |
| <li><a href="teardown.html">Teardown</a></li> |
| <li><a href="test.html">Test</a></li> |
| <li><a href="testCase.html">TestCase</a></li> |
| <li><a href="testCaseSource.html">TestCaseSource</a></li> |
| <li><a href="testFixture.html">TestFixture</a></li> |
| <li><a href="fixtureSetup.html">TestFixtureSetUp</a></li> |
| <li><a href="fixtureTeardown.html">TestFixtureTearDown</a></li> |
| <li><a href="theory.html">Theory</a></li> |
| <li><a href="timeout.html">Timeout</a></li> |
| <li><a href="values.html">Values</a></li> |
| <li><a href="valueSource.html">ValueSource</a></li> |
| </ul> |
| <li><a href="runningTests.html">Running Tests</a></li> |
| <li><a href="extensibility.html">Extensibility</a></li> |
| <li><a href="releaseNotes.html">Release Notes</a></li> |
| <li><a href="samples.html">Samples</a></li> |
| <li><a href="license.html">License</a></li> |
| </ul> |
| </ul> |
| </div> |
| <!-- End of Submenu --> |
| |
| |
| <!-- Standard Footer for NUnit.org --> |
| <div id="footer"> |
| Copyright © 2010 Charlie Poole. All Rights Reserved. |
| </div> |
| <!-- End of Footer --> |
| |
| </body> |
| </html> |