1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<!-- Standard Head Part -->
<head>
<title>NUnit - CustomAsserts</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">
<h2>Custom Asserts</h2>
<div style="text-align: center; margin: 2em 10%; padding: 4px 0; border: 2px solid black">
<h4>Preliminary documentation, subject to change.</h4>
</div>
<p>Experienced developers using NUnit generally end up with a library of custom
setup, teardown, test and support methods. Custom Asserts provide one way to
re-package such methods, allowing the normal NUnit syntax to be used to
invoke them and providing error messages that match the style and layout
of standard NUnit messages.</p>
<p>The standard NUnit Asserts create an object known as an <b>asserter</b> and
pass it to the <b>DoAssert</b> method, which includes code similar to this...
<pre>
if ( !asserter.Test() )
throw new AssertionException( asserter.Message );
</pre></p>
<p><b>Asserters</b> encapsulate the comparison to be performed as well as the
objects being compared. They implement the <b>IAsserter</b> interface,
defined as follows:
<pre>
public interface IAsserter
{
// Test the condition for the assertion.
bool Test();
// Return the message giving the failure reason.
string Message { get; }
}
</pre></p>
<p>When implementing an <b>asserter</b>, you will have to decide on an approach
for creating the message. For complex tests, it may be necessary to create
and cache the message - or info used to create it - while the test is
being performed. For example, when NUnit compares arrays, it notes the
point of failure for use in the message. Otherwise, it would have to
pass the entire array a second time.</p>
<p>Generally, the constructor for the <b>asserter</b> will include any required
parameters, the actual value and an optional user message. You may invoke
the asserter directly, using <b>Assert.DoAssert</b>, but it is generally more
convenient and readable to create an class similar to NUNit's <b>Assert</b> class,
which contains static methods that wrap the object creation. For an example of
how to do this, see the <b>StringAssert</b> class in the NUnit source.</p>
</div>
<!-- Submenu -->
<div id="subnav">
<ul>
<li><a href="index.html">NUnit 2.4.7</a></li>
<ul>
<li><a href="getStarted.html">Getting Started</a></li>
<li><a href="assertions.html">Assertions</a></li>
<li><a href="attributes.html">Attributes</a></li>
<li><a href="nunit-console.html">Console Runner</a></li>
<li><a href="nunit-gui.html">Gui Runner</a></li>
<li><a href="features.html">Other Features</a></li>
<ul>
<li><a href="configFiles.html">Configuration Files</a></li>
<li><a href="multiAssembly.html">Multiple Assemblies</a></li>
<li><a href="vsSupport.html">Visual Studio Support</a></li>
<li><a href="extensibility.html">Extensibility</a></li>
<ul>
<li id="current"><a href="customAsserts.html">Custom Asserts</a></li>
<li><a href="nunitAddins.html">NUnit Addins</a></li>
</ul>
</ul>
<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 © 2008 Charlie Poole. All Rights Reserved.
</div>
<!-- End of Footer -->
</body>
</html>
|