builder.html
来自「perl教程」· HTML 代码 · 共 798 行 · 第 1/3 页
HTML
798 行
TODO test, the <a href="#item_todo_output"><code>todo_output()</code></a> handle is used.</p>
</dd>
<dd>
<p>Output will be indented and marked with a # so as not to interfere
with test output. A newline will be put on the end if there isn't one
already.</p>
</dd>
<dd>
<p>We encourage using this rather than calling print directly.</p>
</dd>
<dd>
<p>Returns false. Why? Because <a href="#item_diag"><code>diag()</code></a> is often used in conjunction with
a failing test (<a href="#item_ok"><code>ok() || diag()</code></a>) it "passes through" the failure.</p>
</dd>
<dd>
<pre>
<span class="keyword">return</span> <span class="variable">ok</span><span class="operator">(...)</span> <span class="operator">||</span> <span class="variable">diag</span><span class="operator">(...);</span>
</pre>
</dd>
<dt><strong><a name="item__print_diag"><strong>_print_diag</strong></a></strong>
<dd>
<pre>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">_print_diag</span><span class="operator">(</span><span class="variable">@msg</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Like _print, but prints to the current diagnostic filehandle.</p>
</dd>
<dt><strong><a name="item_output"><strong>output</strong></a></strong>
<dd>
<pre>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">output</span><span class="operator">(</span><span class="variable">$fh</span><span class="operator">);</span>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">output</span><span class="operator">(</span><span class="variable">$file</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Where normal "ok/not ok" test output should go.</p>
</dd>
<dd>
<p>Defaults to STDOUT.</p>
</dd>
<dt><strong><a name="item_failure_output"><strong>failure_output</strong></a></strong>
<dd>
<pre>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">failure_output</span><span class="operator">(</span><span class="variable">$fh</span><span class="operator">);</span>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">failure_output</span><span class="operator">(</span><span class="variable">$file</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Where diagnostic output on test failures and <a href="#item_diag"><code>diag()</code></a> should go.</p>
</dd>
<dd>
<p>Defaults to STDERR.</p>
</dd>
<dt><strong><a name="item_todo_output"><strong>todo_output</strong></a></strong>
<dd>
<pre>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">todo_output</span><span class="operator">(</span><span class="variable">$fh</span><span class="operator">);</span>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">todo_output</span><span class="operator">(</span><span class="variable">$file</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Where diagnostics about todo test failures and <a href="#item_diag"><code>diag()</code></a> should go.</p>
</dd>
<dd>
<p>Defaults to STDOUT.</p>
</dd>
</dl>
<p>
</p>
<h2><a name="test_status_and_info">Test Status and Info</a></h2>
<dl>
<dt><strong><a name="item_current_test"><strong>current_test</strong></a></strong>
<dd>
<pre>
<span class="keyword">my</span> <span class="variable">$curr_test</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="variable">current_test</span><span class="operator">;</span>
<span class="variable">$Test</span><span class="operator">-></span><span class="variable">current_test</span><span class="operator">(</span><span class="variable">$num</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Gets/sets the current test number we're on. You usually shouldn't
have to set this.</p>
</dd>
<dd>
<p>If set forward, the details of the missing tests are filled in as 'unknown'.
if set backward, the details of the intervening tests are deleted. You
can erase history if you really want to.</p>
</dd>
<dt><strong><a name="item_summary"><strong>summary</strong></a></strong>
<dd>
<pre>
<span class="keyword">my</span> <span class="variable">@tests</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="variable">summary</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>A simple summary of the tests so far. True for pass, false for fail.
This is a logical pass/fail, so todos are passes.</p>
</dd>
<dd>
<p>Of course, test #1 is $tests[0], etc...</p>
</dd>
<dt><strong><a name="item_details"><strong>details</strong></a></strong>
<dd>
<pre>
<span class="keyword">my</span> <span class="variable">@tests</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="variable">details</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>Like summary(), but with a lot more detail.</p>
</dd>
<dd>
<pre>
<span class="variable">$tests</span><span class="operator">[</span><span class="variable">$test_num</span> <span class="operator">-</span> <span class="number">1</span><span class="operator">]</span> <span class="operator">=</span>
<span class="operator">{</span> <span class="string">'ok'</span> <span class="operator">=></span> <span class="variable">is</span> <span class="variable">the</span> <span class="variable">test</span> <span class="variable">considered</span> <span class="variable">a</span> <span class="variable">pass</span><span class="operator">?</span>
<span class="string">actual_ok</span> <span class="operator">=></span> <span class="variable">did</span> <span class="variable">it</span> <span class="variable">literally</span> <span class="variable">say</span> <span class="string">'ok'</span><span class="operator">?</span>
<span class="string">name</span> <span class="operator">=></span> <span class="variable">name</span> <span class="variable">of</span> <span class="variable">the</span> <span class="variable">test</span> <span class="operator">(</span><span class="keyword">if</span> <span class="variable">any</span><span class="operator">)</span>
<span class="string">type</span> <span class="operator">=></span> <span class="variable">type</span> <span class="variable">of</span> <span class="variable">test</span> <span class="operator">(</span><span class="keyword">if</span> <span class="variable">any</span><span class="operator">,</span> <span class="variable">see</span> <span class="variable">below</span><span class="operator">).</span>
<span class="string">reason</span> <span class="operator">=></span> <span class="variable">reason</span> <span class="keyword">for</span> <span class="variable">the</span> <span class="variable">above</span> <span class="operator">(</span><span class="keyword">if</span> <span class="variable">any</span><span class="operator">)</span>
<span class="operator">}</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>'ok' is true if Test::Harness will consider the test to be a pass.</p>
</dd>
<dd>
<p>'actual_ok' is a reflection of whether or not the test literally
printed 'ok' or 'not ok'. This is for examining the result of 'todo'
tests.</p>
</dd>
<dd>
<p>'name' is the name of the test.</p>
</dd>
<dd>
<p>'type' indicates if it was a special test. Normal tests have a type
of ''. Type can be one of the following:</p>
</dd>
<dd>
<pre>
skip see skip()
todo see todo()
todo_skip see todo_skip()
unknown see below</pre>
</dd>
<dd>
<p>Sometimes the Test::Builder test counter is incremented without it
printing any test output, for example, when <a href="#item_current_test"><code>current_test()</code></a> is changed.
In these cases, Test::Builder doesn't know the result of the test, so
it's type is 'unkown'. These details for these tests are filled in.
They are considered ok, but the name and actual_ok is left undef.</p>
</dd>
<dd>
<p>For example "not ok 23 - hole count # TODO insufficient donuts" would
result in this structure:</p>
</dd>
<dd>
<pre>
<span class="variable">$tests</span><span class="operator">[</span><span class="number">22</span><span class="operator">]</span> <span class="operator">=</span> <span class="comment"># 23 - 1, since arrays start from 0.</span>
<span class="operator">{</span> <span class="string">ok</span> <span class="operator">=></span> <span class="number">1</span><span class="operator">,</span> <span class="comment"># logically, the test passed since it's todo</span>
<span class="string">actual_ok</span> <span class="operator">=></span> <span class="number">0</span><span class="operator">,</span> <span class="comment"># in absolute terms, it failed</span>
<span class="string">name</span> <span class="operator">=></span> <span class="string">'hole count'</span><span class="operator">,</span>
<span class="string">type</span> <span class="operator">=></span> <span class="string">'todo'</span><span class="operator">,</span>
<span class="string">reason</span> <span class="operator">=></span> <span class="string">'insufficient donuts'</span>
<span class="operator">}</span><span class="operator">;</span>
</pre>
</dd>
<dt><strong><a name="item_todo"><strong>todo</strong></a></strong>
<dd>
<pre>
<span class="keyword">my</span> <span class="variable">$todo_reason</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="variable">todo</span><span class="operator">;</span>
<span class="keyword">my</span> <span class="variable">$todo_reason</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="variable">todo</span><span class="operator">(</span><span class="variable">$pack</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p><a href="#item_todo"><code>todo()</code></a> looks for a $TODO variable in your tests. If set, all tests
will be considered 'todo' (see Test::More and Test::Harness for
details). Returns the reason (ie. the value of $TODO) if running as
todo tests, false otherwise.</p>
</dd>
<dd>
<p><a href="#item_todo"><code>todo()</code></a> is about finding the right package to look for $TODO in. It
uses the <a href="#item_exported_to"><code>exported_to()</code></a> package to find it. If that's not set, it's
pretty good at guessing the right package to look at based on $Level.</p>
</dd>
<dd>
<p>Sometimes there is some confusion about where <a href="#item_todo"><code>todo()</code></a> should be looking
for the $TODO variable. If you want to be sure, tell it explicitly
what $pack to use.</p>
</dd>
<dt><strong><a name="item_caller"><strong>caller</strong></a></strong>
<dd>
<pre>
<span class="keyword">my</span> <span class="variable">$package</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="keyword">caller</span><span class="operator">;</span>
<span class="keyword">my</span><span class="operator">(</span><span class="variable">$pack</span><span class="operator">,</span> <span class="variable">$file</span><span class="operator">,</span> <span class="variable">$line</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="keyword">caller</span><span class="operator">;</span>
<span class="keyword">my</span><span class="operator">(</span><span class="variable">$pack</span><span class="operator">,</span> <span class="variable">$file</span><span class="operator">,</span> <span class="variable">$line</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-></span><span class="keyword">caller</span><span class="operator">(</span><span class="variable">$height</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Like the normal caller(), except it reports according to your level().</p>
</dd>
</dl>
<p>
</p>
<hr />
<h1><a name="exit_codes">EXIT CODES</a></h1>
<p>If all your tests passed, Test::Builder will exit with zero (which is
normal). If anything failed it will exit with how many failed. If
you run less (or more) tests than you planned, the missing (or extras)
will be considered failures. If no tests were ever run Test::Builder
will throw a warning and exit with 255. If the test died, even after
having successfully completed all its tests, it will still be
considered a failure and will exit with 255.</p>
<p>So the exit codes are...</p>
<pre>
0 all tests successful
255 test died or all passed but wrong # of tests run
any other number how many failed (including missing or extras)</pre>
<p>If you fail more than 254 tests, it will be reported as 254.</p>
<p>
</p>
<hr />
<h1><a name="threads">THREADS</a></h1>
<p>In perl 5.8.0 and later, Test::Builder is thread-safe. The test
number is shared amongst all threads. This means if one thread sets
the test number using <a href="#item_current_test"><code>current_test()</code></a> they will all be effected.</p>
<p>Test::Builder is only thread-aware if threads.pm is loaded <em>before</em>
Test::Builder.</p>
<p>
</p>
<hr />
<h1><a name="examples">EXAMPLES</a></h1>
<p>CPAN can provide the best examples. Test::Simple, Test::More,
Test::Exception and Test::Differences all use Test::Builder.</p>
<p>
</p>
<hr />
<h1><a name="see_also">SEE ALSO</a></h1>
<p>Test::Simple, Test::More, Test::Harness</p>
<p>
</p>
<hr />
<h1><a name="authors">AUTHORS</a></h1>
<p>Original code by chromatic, maintained by Michael G Schwern
<<a href="mailto:schwern@pobox.com">schwern@pobox.com</a>></p>
<p>
</p>
<hr />
<h1><a name="copyright">COPYRIGHT</a></h1>
<p>Copyright 2002, 2004 by chromatic <<a href="mailto:chromatic@wgz.org">chromatic@wgz.org</a>> and
Michael G Schwern <<a href="mailto:schwern@pobox.com">schwern@pobox.com</a>>.</p>
<p>This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.</p>
<p>See <em><a href="http://www.perl.com/perl/misc/Artistic.html">http://www.perl.com/perl/misc/Artistic.html</a></em></p>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?