This file is indexed.

/usr/share/doc/nunit/html/theory.html is in libnunit-doc 2.6.3+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<!-- saved from url=(0014)about:internet --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<!-- Standard Head Part -->
<head>
<title>NUnit - Theory</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Content-Language" content="en-US">
<meta name="norton-safeweb-site-verification" content="tb6xj01p4hgo5x-8wscsmq633y11-e6nhk-bnb5d987bseanyp6p0uew-pec8j963qlzj32k5x9h3r2q7wh-vmy8bbhek5lnpp5w4p8hocouuq39e09jrkihdtaeknua" />
<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">

<h3>TheoryAttribute (NUnit 2.5)</h3>

<p>A Theory is a special type of test, used to verify a general
   statement about the system under development. Normal tests are
   <em>example-based</em>. That is, the developer supplies one or
   more examples of inputs and expected outputs either within the
   code of the test or - in the case of
   <a href="parameterizedTests.html">Parameterized Tests</a> 
   - as arguments to the test method. A theory, on the other hand,
   makes a general statement that all of its assertions will pass
   for all arguments satisfying certain assumptions.
   
<p>Theories are implemented in NUnit
   as methods within a <b>TestFixture</b>, which are annotated
   with the <b>TheoryAttribute</b>. Theory methods must always have 
   arguments and therefore appears quite similar to 
   <a href="parameterizedTests.html">Parameterized Tests</a>   at first glance. However, a Theory incorporates additional data sources 
   for its arguments and allows special processing for assumptions
   about that data. The key difference, though, is that theories
   make general statements and are more than just a set of examples.
   
<h4>Data for Theories</h4>

<p>The primary source of data for a <b>Theory</b> is the
   <a href="datapoint.html"><b>Datapoint</b> or <b>Datapoints</b> attribute</a>. 
   NUnit will use any fields of the required types, which are annotated
   with one of these attributes, to provide data for each parameter
   of the Theory. NUnit assembles the values for individual arguments 
   combinatorially to provide test cases for the theory.
   
<p>In addition to the Datapoint and Datapoints attributes, it
   is possible to use any of the approaches for supplying data
   that are recognized on normal parameterized tests. We suggest
   that this capability not be overused, since it runs counter
   to the distinction between a test based on examples and a
   theory. However, it may be useful in order to guarantee that
   a specific test case is included.

<p>For <b>boolean</b> and <b>enum</b> arguments, NUnit can supply the 
   data without any action by the user. All possible values are supplied
   to the argument. This feature is disabled if the user supplies any 
   values for the argument.
   
<h4>Assumptions</h4>

<p>The theory itself is responsible for ensuring that all data supplied
   meets its assumptions. It does this by use of the
   <b>Assume.That(...)</b> construct, which works just like
   <b>Assert.That(...)</b> but does not cause a failure. If
   the assumption is not satisfied for a particular test case, that case
   returns an Inconclusive result, rather than a Success or Failure. 
   
<p>The overall result of executing a Theory over a set of test cases is 
   determined as follows:
   
   <ul>
   <li>If the assumptions are violated for <b>all</b> test cases, then the
       Theory itself is marked as a failure.
   
   <li>If any Assertion fails, the Theory itself fails.
   
   <li>If at least <b>some</b> cases pass the stated assumptions, and 
       there are <b>no</b> assertion failures or exceptions, then the
	   Theory passes.
   </ul>

<p>Since the user does not generally care about inconclusive cases under
   a theory, they are not normally displayed in the Gui. For situations
   where they are needed - such as debugging - the context menu for the
   theory provides an option to display them.
   
<h4>Example:</h4>

<p>In the following example, the theory SquareRootDefinition
   verifies that the implementation of square root satisies
   the following definition:
   
<p style="margin: 2em"><i>
"Given a non-negative number, the square root of that number
 is always non-negative and, when multiplied by itself, gives 
 the original number."</i>

<div class="code" style="width: 36em">
<pre>
public class SqrtTests
{
    [Datapoints]
    public double[] values = new double[] { 0.0, 1.0, -1.0, 42.0 };

    [Theory]
    public void SquareRootDefinition(double num)
    {
        Assume.That(num >= 0.0);

        double sqrt = Math.Sqrt(num);

        Assert.That(sqrt >= 0.0);
        Assert.That(sqrt * sqrt, Is.EqualTo(num).Within(0.000001));
    }
}
</pre>
</div>
   
<h4>See also...</h4>

<ul>
<li><a href="datapoint.html">Datapoint(s)Attribute</a><li><a href="parameterizedTests.html">Parameterized Tests</a></ul>

</div>

<!-- Submenu -->
<div id="subnav">
<ul>
<li><a href="index.html">NUnit 2.6.3</a></li>
<ul>
<li><a href="getStarted.html">Getting&nbsp;Started</a></li>
<li><a href="writingTests.html">Writing&nbsp;Tests</a></li>
<ul>
<li><a href="assertions.html">Assertions</a></li>
<li><a href="attributes.html">Attributes</a></li>
<ul>
<li><a href="actionAttributes.html">Action&nbsp;Attributes</a></li>
<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><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&nbsp;MTA</a></li>
<li><a href="requiresSTA.html">Requires&nbsp;STA</a></li>
<li><a href="requiresThread.html">Requires&nbsp;Thread</a></li>
<li><a href="sequential.html">Sequential</a></li>
<li><a href="setCulture.html">SetCulture</a></li>
<li><a href="setUICulture.html">SetUICulture</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 id="current"><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="testContext.html">Test&nbsp;Context</a></li>
</ul>
<li><a href="runningTests.html">Running&nbsp;Tests</a></li>
<li><a href="extensibility.html">Extensibility</a></li>
<li><a href="releaseNotes.html">Release&nbsp;Notes</a></li>
<li><a href="samples.html">Samples</a></li>
<li><a href="license.html">License</a></li>
</ul>
<li><a href="vsTestAdapter.html">NUnit&nbsp;Test&nbsp;Adapter</a></li>
<ul>
<li><a href="vsTestAdapterLicense.html">License</a></li>
<li><a href="vsTestAdapterReleaseNotes.html">Release&nbsp;Notes</a></li>
</ul>
<li><a href="&r=2.6.3.html"></a></li>
<li><a href="&r=2.6.3.html"></a></li>
</ul>
</div>
<!-- End of Submenu -->


<!-- Standard Footer for NUnit.org -->
<div id="footer">
  Copyright &copy; 2012 Charlie Poole. All Rights Reserved.
</div>
<!-- End of Footer -->

</body>
</html>