Repository navigation
Expand file tree
/
Copy pathplugin_exceptions.html
More file actions
124 lines (117 loc) · 12.1 KB
/
Copy pathplugin_exceptions.html
File metadata and controls
124 lines (117 loc) · 12.1 KB
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
<html>
<head>
<title>nose: When Plugins Fail</title>
<link rel="stylesheet" href="site.css" type="text/css"></link>
</head>
<body>
<div id="menu">
<p>This document covers nose version <b>0.10.1</b></p>
<p>Last update: <b>Fri Jan 4 10:06:23 2008</b></p>
<h2>Plugins</h2><ul><li><a href="plugin_attrib.html">Builtin Plugin: attrib</a></li><li><a href="plugin_capture.html">Builtin Plugin: capture</a></li><li><a href="plugin_cover.html">Builtin Plugin: cover</a></li><li><a href="plugin_debug.html">Builtin Plugin: debug</a></li><li><a href="plugin_deprecated.html">Builtin Plugin: deprecated</a></li><li><a href="plugin_doctests.html">Builtin Plugin: doctests</a></li><li><a href="plugin_failuredetail.html">Builtin Plugin: failuredetail</a></li><li><a href="plugin_isolate.html">Builtin Plugin: isolate</a></li><li><a href="plugin_prof.html">Builtin Plugin: prof</a></li><li><a href="plugin_skip.html">Builtin Plugin: skip</a></li><li><a href="plugin_testid.html">Builtin Plugin: testid</a></li><li><a href="error_class_plugin.html">ErrorClass Plugins</a></li><li><a href="plugin_interface.html">Plugin Interface</a></li><li><a href="writing_plugins.html">Writing Plugins</a></li></ul><h2>Modules</h2><ul><li><a href="module_nose.case.html">Module: nose.case</a></li><li><a href="module_nose.commands.html">Module: nose.commands</a></li><li><a href="module_nose.config.html">Module: nose.config</a></li><li><a href="module_nose.core.html">Module: nose.core</a></li><li><a href="module_nose.exc.html">Module: nose.exc</a></li><li><a href="module_nose.importer.html">Module: nose.importer</a></li><li><a href="module_nose.inspector.html">Module: nose.inspector</a></li><li><a href="module_nose.loader.html">Module: nose.loader</a></li><li><a href="module_nose.plugins.manager.html">Module: nose.plugins.manager</a></li><li><a href="module_nose.plugins.plugintest.html">Module: nose.plugins.plugintest</a></li><li><a href="module_nose.proxy.html">Module: nose.proxy</a></li><li><a href="module_nose.result.html">Module: nose.result</a></li><li><a href="module_nose.selector.html">Module: nose.selector</a></li><li><a href="module_nose.suite.html">Module: nose.suite</a></li><li><a href="module_nose.tools.html">Module: nose.tools</a></li><li><a href="module_nose.twistedtools.html">Module: nose.twistedtools</a></li><li><a href="module_nose.util.html">Module: nose.util</a></li></ul><h2>Plugin Examples</h2><ul><li><a href="unwanted_package.html">Excluding Unwanted Packages</a></li><li><a href="empty_plugin.html">Minimal plugin</a></li><li><a href="init_plugin.html">Running Initialization Code Before the Test Run</a></li><li><a href="selector_plugin.html">Using a Custom Selector</a></li><li><a href="plugin_exceptions.html">When Plugins Fail</a></li><li><a href="plugintest_environment.html">nose.plugins.plugintest, os.environ and sys.argv</a></li></ul>
</div>
<div id="main">
<h1>nose: When Plugins Fail</h1>
<p>Plugin methods should not fail silently. When a plugin method raises
an exception before or during the execution of a test, the exception
will be wrapped in a <a class="reference" href="module_nose.case.html#Failure">nose.case.Failure</a> instance and appear as a
failing test. Exceptions raised at other times, such as in the
preparation phase with <tt class="docutils literal"><span class="pre">prepareTestLoader</span></tt> or <tt class="docutils literal"><span class="pre">prepareTestResult</span></tt>,
or after a test executes, in <tt class="docutils literal"><span class="pre">afterTest</span></tt> will stop the entire test
run.</p>
<blockquote>
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">import</span> <span class="nn">os</span>
<span class="gp">>>> </span><span class="k">import</span> <span class="nn">sys</span>
<span class="gp">>>> </span><span class="k">from</span> <span class="nn">nose.plugins</span> <span class="k">import</span> <span class="n">Plugin</span>
<span class="gp">>>> </span><span class="k">from</span> <span class="nn">nose.plugins.plugintest</span> <span class="k">import</span> <span class="n">run</span>
</pre></div>
</blockquote>
<p>Our first test plugins take no command-line arguments and raises
AttributeError in beforeTest and afterTest.</p>
<blockquote>
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">EnabledPlugin</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
<span class="gp">... </span> <span class="sd">"""Plugin that takes no command-line arguments"""</span>
<span class="go">...</span>
<span class="gp">... </span> <span class="n">enabled</span> <span class="o">=</span> <span class="bp">True</span>
<span class="go">...</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">conf</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">pass</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parser</span><span class="p">,</span> <span class="n">env</span><span class="o">=</span><span class="p">{}):</span>
<span class="gp">... </span> <span class="k">pass</span>
</pre></div>
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">FailBeforePlugin</span><span class="p">(</span><span class="n">EnabledPlugin</span><span class="p">):</span>
<span class="gp">... </span> <span class="n">name</span> <span class="o">=</span> <span class="s">"fail-before"</span>
<span class="go">...</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">beforeTest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">test</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">()</span>
</pre></div>
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">FailAfterPlugin</span><span class="p">(</span><span class="n">EnabledPlugin</span><span class="p">):</span>
<span class="gp">... </span> <span class="n">name</span> <span class="o">=</span> <span class="s">"fail-after"</span>
<span class="go">...</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">afterTest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">test</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">()</span>
</pre></div>
</blockquote>
<p>Running tests with the fail-before plugin enabled will result in all
tests failing.</p>
<blockquote>
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">support</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s">'support'</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">suitepath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">support</span><span class="p">,</span> <span class="s">'test_spam.py'</span><span class="p">)</span>
</pre></div>
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s">'nosetests'</span><span class="p">,</span> <span class="n">suitepath</span><span class="p">],</span>
<span class="gp">... </span> <span class="n">plugins</span><span class="o">=</span><span class="p">[</span><span class="n">FailBeforePlugin</span><span class="p">()])</span>
<span class="go">EE</span>
<span class="go">======================================================================</span>
<span class="go">ERROR: test_spam.test_spam</span>
<span class="go">----------------------------------------------------------------------</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="nc">AttributeError</span>
<span class="go"><BLANKLINE></span>
<span class="go">======================================================================</span>
<span class="go">ERROR: test_spam.test_eggs</span>
<span class="go">----------------------------------------------------------------------</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="nc">AttributeError</span>
<span class="go"><BLANKLINE></span>
<span class="go">----------------------------------------------------------------------</span>
<span class="go">Ran 0 tests in ...s</span>
<span class="go"><BLANKLINE></span>
<span class="go">FAILED (errors=2)</span>
</pre></div>
</blockquote>
<p>But with the fail-after plugin, the entire test run will fail.</p>
<blockquote>
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s">'nosetests'</span><span class="p">,</span> <span class="n">suitepath</span><span class="p">],</span>
<span class="gp">... </span> <span class="n">plugins</span><span class="o">=</span><span class="p">[</span><span class="n">FailAfterPlugin</span><span class="p">()])</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="nc">AttributeError</span>
</pre></div>
</blockquote>
<p>Likewise since the next plugin fails in a preparatory method, outside
of test execution, the entire test run fails when the plugin is used.</p>
<blockquote>
<div class="highlight"><pre><span class="gp">>>> </span><span class="k">class</span> <span class="nc">FailPreparationPlugin</span><span class="p">(</span><span class="n">EnabledPlugin</span><span class="p">):</span>
<span class="gp">... </span> <span class="n">name</span> <span class="o">=</span> <span class="s">"fail-prepare"</span>
<span class="go">...</span>
<span class="gp">... </span> <span class="k">def</span> <span class="nf">prepareTestLoader</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">loader</span><span class="p">):</span>
<span class="gp">... </span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"That loader is not my type"</span><span class="p">)</span>
</pre></div>
<div class="highlight"><pre><span class="gp">>>> </span><span class="n">run</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s">'nosetests'</span><span class="p">,</span> <span class="n">suitepath</span><span class="p">],</span>
<span class="gp">... </span> <span class="n">plugins</span><span class="o">=</span><span class="p">[</span><span class="n">FailPreparationPlugin</span><span class="p">()])</span>
<span class="gt">Traceback (most recent call last):</span>
<span class="c">...</span>
<span class="nc">TypeError</span>: <span class="n-Identifier">That loader is not my type</span>
</pre></div>
</blockquote>
</div>
<script src="http://www.google-analytics.com/urchin.js"
type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2236166-1";
urchinTracker();
</script>
</body>
</html>