builder.html

来自「perl教程」· HTML 代码 · 共 798 行 · 第 1/3 页

HTML
798
字号
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>Test::Builder - Backend for building test libraries</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>

<body>

<script>writelinks('__top__',2);</script>
<h1><a>Test::Builder - Backend for building test libraries</a></h1>
<p><a name="__index__"></a></p>

<!-- INDEX BEGIN -->

<ul>

	<li><a href="#name">NAME</a></li>
	<li><a href="#synopsis">SYNOPSIS</a></li>
	<li><a href="#description">DESCRIPTION</a></li>
	<ul>

		<li><a href="#construction">Construction</a></li>
		<li><a href="#setting_up_tests">Setting up tests</a></li>
		<li><a href="#running_tests">Running tests</a></li>
		<li><a href="#test_style">Test style</a></li>
		<li><a href="#output">Output</a></li>
		<li><a href="#test_status_and_info">Test Status and Info</a></li>
	</ul>

	<li><a href="#exit_codes">EXIT CODES</a></li>
	<li><a href="#threads">THREADS</a></li>
	<li><a href="#examples">EXAMPLES</a></li>
	<li><a href="#see_also">SEE ALSO</a></li>
	<li><a href="#authors">AUTHORS</a></li>
	<li><a href="#copyright">COPYRIGHT</a></li>
</ul>
<!-- INDEX END -->

<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>Test::Builder - Backend for building test libraries</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
  <span class="keyword">package</span> <span class="variable">My::Test::Module</span><span class="operator">;</span>
  <span class="keyword">use</span> <span class="variable">Test::Builder</span><span class="operator">;</span>
  <span class="keyword">require</span> <span class="variable">Exporter</span><span class="operator">;</span>
  <span class="variable">@ISA</span> <span class="operator">=</span> <span class="string">qw(Exporter)</span><span class="operator">;</span>
  <span class="variable">@EXPORT</span> <span class="operator">=</span> <span class="string">qw(ok)</span><span class="operator">;</span>
</pre>
<pre>
  <span class="keyword">my</span> <span class="variable">$Test</span> <span class="operator">=</span> <span class="variable">Test::Builder</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">;</span>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">output</span><span class="operator">(</span><span class="string">'my_logfile'</span><span class="operator">);</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> import </span><span class="operator">{</span>
      <span class="keyword">my</span><span class="operator">(</span><span class="variable">$self</span><span class="operator">)</span> <span class="operator">=</span> <span class="keyword">shift</span><span class="operator">;</span>
      <span class="keyword">my</span> <span class="variable">$pack</span> <span class="operator">=</span> <span class="keyword">caller</span><span class="operator">;</span>
</pre>
<pre>
      <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">exported_to</span><span class="operator">(</span><span class="variable">$pack</span><span class="operator">);</span>
      <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">plan</span><span class="operator">(</span><span class="variable">@_</span><span class="operator">);</span>
</pre>
<pre>
      <span class="variable">$self</span><span class="operator">-&gt;</span><span class="variable">export_to_level</span><span class="operator">(</span><span class="number">1</span><span class="operator">,</span> <span class="variable">$self</span><span class="operator">,</span> <span class="string">'ok'</span><span class="operator">);</span>
        <span class="operator">}</span>
</pre>
<pre>
  <span class="keyword">sub</span><span class="variable"> ok </span><span class="operator">{</span>
      <span class="keyword">my</span><span class="operator">(</span><span class="variable">$test</span><span class="operator">,</span> <span class="variable">$name</span><span class="operator">)</span> <span class="operator">=</span> <span class="variable">@_</span><span class="operator">;</span>
</pre>
<pre>
      <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">ok</span><span class="operator">(</span><span class="variable">$test</span><span class="operator">,</span> <span class="variable">$name</span><span class="operator">);</span>
        <span class="operator">}</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p>Test::Simple and Test::More have proven to be popular testing modules,
but they're not always flexible enough.  Test::Builder provides the a
building block upon which to write your own test libraries <em>which can
work together</em>.</p>
<p>
</p>
<h2><a name="construction">Construction</a></h2>
<dl>
<dt><strong><a name="item_new"><strong>new</strong></a></strong>

<dd>
<pre>
  <span class="keyword">my</span> <span class="variable">$Test</span> <span class="operator">=</span> <span class="variable">Test::Builder</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>Returns a Test::Builder object representing the current state of the
test.</p>
</dd>
<dd>
<p>Since you only run one test per program <a href="#item_new"><code>new</code></a> always returns the same
Test::Builder object.  No matter how many times you call new(), you're
getting the same object.  This is called a singleton.  This is done so that
multiple modules share such global information as the test counter and
where test output is going.</p>
</dd>
<dd>
<p>If you want a completely new Test::Builder object different from the
singleton, use <a href="#item_create"><code>create</code></a>.</p>
</dd>
<dt><strong><a name="item_create"><strong>create</strong></a></strong>

<dd>
<pre>
  <span class="keyword">my</span> <span class="variable">$Test</span> <span class="operator">=</span> <span class="variable">Test::Builder</span><span class="operator">-&gt;</span><span class="variable">create</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>Ok, so there can be more than one Test::Builder object and this is how
you get it.  You might use this instead of <a href="#item_new"><code>new()</code></a> if you're testing
a Test::Builder based module, but otherwise you probably want <a href="#item_new"><code>new</code></a>.</p>
</dd>
<dd>
<p><strong>NOTE</strong>: the implementation is not complete.  <a href="#item_level"><code>level</code></a>, for example, is
still shared amongst <strong>all</strong> Test::Builder objects, even ones created using
this method.  Also, the method name may change in the future.</p>
</dd>
<dt><strong><a name="item_reset"><strong>reset</strong></a></strong>

<dd>
<pre>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="keyword">reset</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>Reinitializes the Test::Builder singleton to its original state.
Mostly useful for tests run in persistent environments where the same
test might be run multiple times in the same process.</p>
</dd>
</dl>
<p>
</p>
<h2><a name="setting_up_tests">Setting up tests</a></h2>
<p>These methods are for setting up tests and declaring how many there
are.  You usually only want to call one of these methods.</p>
<dl>
<dt><strong><a name="item_exported_to"><strong>exported_to</strong></a></strong>

<dd>
<pre>
  <span class="keyword">my</span> <span class="variable">$pack</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">exported_to</span><span class="operator">;</span>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">exported_to</span><span class="operator">(</span><span class="variable">$pack</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Tells Test::Builder what package you exported your functions to.
This is important for getting TODO tests right.</p>
</dd>
<dt><strong><a name="item_plan"><strong>plan</strong></a></strong>

<dd>
<pre>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">plan</span><span class="operator">(</span><span class="string">'no_plan'</span><span class="operator">);</span>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">plan</span><span class="operator">(</span> <span class="string">skip_all</span> <span class="operator">=&gt;</span> <span class="variable">$reason</span> <span class="operator">);</span>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">plan</span><span class="operator">(</span> <span class="string">tests</span> <span class="operator">=&gt;</span> <span class="variable">$num_tests</span> <span class="operator">);</span>
</pre>
</dd>
<dd>
<p>A convenient way to set up your tests.  Call this and Test::Builder
will print the appropriate headers and take the appropriate actions.</p>
</dd>
<dd>
<p>If you call plan(), don't call any of the other methods below.</p>
</dd>
<dt><strong><a name="item_expected_tests"><strong>expected_tests</strong></a></strong>

<dd>
<pre>
    <span class="keyword">my</span> <span class="variable">$max</span> <span class="operator">=</span> <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">expected_tests</span><span class="operator">;</span>
    <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">expected_tests</span><span class="operator">(</span><span class="variable">$max</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Gets/sets the # of tests we expect this test to run and prints out
the appropriate headers.</p>
</dd>
<dt><strong><a name="item_no_plan"><strong>no_plan</strong></a></strong>

<dd>
<pre>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">no_plan</span><span class="operator">;</span>
</pre>
</dd>
<dd>
<p>Declares that this test will run an indeterminate # of tests.</p>
</dd>
<dt><strong><a name="item_has_plan"><strong>has_plan</strong></a></strong>

<dd>
<pre>
  $plan = $Test-&gt;has_plan</pre>
</dd>
<dd>
<p>Find out whether a plan has been defined. $plan is either <a href="../../lib/Pod/perlfunc.html#item_undef"><code>undef</code></a> (no plan has been set), <a href="#item_no_plan"><code>no_plan</code></a> (indeterminate # of tests) or an integer (the number of expected tests).</p>
</dd>
<dt><strong><a name="item_skip_all"><strong>skip_all</strong></a></strong>

<dd>
<pre>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">skip_all</span><span class="operator">;</span>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">skip_all</span><span class="operator">(</span><span class="variable">$reason</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Skips all the tests, using the given $reason.  Exits immediately with 0.</p>
</dd>
</dl>
<p>
</p>
<h2><a name="running_tests">Running tests</a></h2>
<p>These actually run the tests, analogous to the functions in
Test::More.</p>
<p>$name is always optional.</p>
<dl>
<dt><strong><a name="item_ok"><strong>ok</strong></a></strong>

<dd>
<pre>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">ok</span><span class="operator">(</span><span class="variable">$test</span><span class="operator">,</span> <span class="variable">$name</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Your basic test.  Pass if $test is true, fail if $test is false.  Just
like Test::Simple's ok().</p>
</dd>
<dt><strong><a name="item_is_eq"><strong>is_eq</strong></a></strong>

<dd>
<pre>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">is_eq</span><span class="operator">(</span><span class="variable">$got</span><span class="operator">,</span> <span class="variable">$expected</span><span class="operator">,</span> <span class="variable">$name</span><span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Like Test::More's is().  Checks if $got eq $expected.  This is the
string version.</p>
</dd>
<dt><strong><a name="item_is_num"><strong>is_num</strong></a></strong>

<dd>
<pre>
  <span class="variable">$Test</span><span class="operator">-&gt;</span><span class="variable">is_num</span><span class="operator">(</span><span class="variable">$got</span><span class="operator">,</span> <span class="variable">$expected</span><span class="operator">,</span> <span class="variable">$name</span><span class="operator">);</span>
</pre>
</dd>
<dd>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?