expectation_documentation.html.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 384 行 · 第 1/2 页

SVN-BASE
384
字号
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Documentation SimpleTest : 茅tendre le testeur unitaire avec des classes d'attentes suppl茅mentaires</title><link rel="stylesheet" type="text/css" href="docs.css" title="Styles"></head><body><div class="menu_back"><div class="menu"><a href="index.html">SimpleTest</a>                |                <a href="overview.html">Overview</a>                |                <a href="unit_test_documentation.html">Unit tester</a>                |                <a href="group_test_documentation.html">Group tests</a>                |                <a href="mock_objects_documentation.html">Mock objects</a>                |                <a href="partial_mocks_documentation.html">Partial mocks</a>                |                <a href="reporter_documentation.html">Reporting</a>                |                <a href="expectation_documentation.html">Expectations</a>                |                <a href="web_tester_documentation.html">Web tester</a>                |                <a href="form_testing_documentation.html">Testing forms</a>                |                <a href="authentication_documentation.html">Authentication</a>                |                <a href="browser_documentation.html">Scriptable browser</a></div></div><h1>Documentation sur les attentes</h1>        This page...        <ul><li>            Utiliser les attentes <a href="#fantaisie">pour des tests            plus pr茅cis avec des objets fantaisie</a>        </li><li>            <a href="#comportement">Changer le comportement d'un objet fantaisie</a>            avec des attentes        </li><li>            <a href="#etendre">Cr茅er des attentes</a>        </li><li>            Par dessous SimpleTest <a href="#unitaire">utilise des classes d'attente</a>        </li></ul><div class="content">        <p><a class="target" name="fantaisie"><h2>Plus de contr么le sur les objets fantaisie</h2></a></p>            <p>                Le comportement par d茅faut des                <a href="mock_objects_documentation.html">objets fantaisie</a> dans                <a href="http://sourceforge.net/projects/simpletest/">SimpleTest</a>                est soit une correspondance identique sur l'argument,                soit l'acceptation de n'importe quel argument.                Pour la plupart des tests, c'est suffisant.                Cependant il est parfois n茅cessaire de ramollir un sc茅nario de test.            </p>            <p>                Un des endroits o霉 un test peut 锚tre trop serr茅                est la reconnaissance textuelle. Prenons l'exemple                d'un composant qui produirait un message d'erreur                utile lorsque quelque chose plante. Il serait utile de tester                que l'erreur correcte est renvoy茅e,                mais le texte proprement dit risque d'锚tre plut么t long.                Si vous testez le texte dans son ensemble alors                脿 chaque modification de ce m锚me message                -- m锚me un point ou une virgule -- vous aurez                脿 revenir sur la suite de test pour la modifier.            </p>            <p>                Voici un cas concret, nous avons un service d'actualit茅s                qui a 茅chou茅 dans sa tentative de connexion 脿 sa source distante.<pre><strong>class NewsService {    ...    function publish(&amp;$writer) {        if (! $this-&gt;isConnected()) {            $writer-&gt;write('Cannot connect to news service "' .                    $this-&gt;_name . '" at this time. ' .                    'Please try again later.');        }        ...    }}</strong></pre>                L脿 il envoie son contenu vers un classe <span class="new_code">Writer</span>.                Nous pourrions tester ce comportement avec un <span class="new_code">MockWriter</span>...<pre>class TestOfNewsService extends UnitTestCase {    ...    function testConnectionFailure() {<strong>        $writer = &amp;new MockWriter($this);        $writer-&gt;expectOnce('write', array(                'Cannot connect to news service ' .                '"BBC News" at this time. ' .                'Please try again later.'));                $service = &amp;new NewsService('BBC News');        $service-&gt;publish($writer);                $writer-&gt;tally();</strong>    }}</pre>                C'est un bon exemple d'un test fragile.                Si nous d茅cidons d'ajouter des instructions compl茅mentaires,                par exemple proposer une source d'actualit茅s alternative,                nous casserons nos tests par la m锚me occasion sans pourtant                avoir modifi茅 une seule fonctionnalit茅.            </p>            <p>                Pour contourner ce probl猫me, nous voudrions utiliser                un test avec une expression rationnelle plut么t                qu'une correspondance exacte. Nous pouvons y parvenir avec...<pre>class TestOfNewsService extends UnitTestCase {    ...    function testConnectionFailure() {        $writer = &amp;new MockWriter($this);<strong>        $writer-&gt;expectOnce(                'write',                array(new WantedPatternExpectation('/cannot connect/i')));</strong>                $service = &amp;new NewsService('BBC News');        $service-&gt;publish($writer);                $writer-&gt;tally();    }}</pre>                Plut么t que de transmettre le param猫tre attendu au <span class="new_code">MockWriter</span>,                nous envoyons une classe d'attente appel茅e <span class="new_code">WantedPatternExpectation</span>.                L'objet fantaisie est suffisamment 茅l茅gant pour reconna卯tre                qu'il s'agit d'un truc sp茅cial et pour le traiter diff茅remment.                Plut么t que de comparer l'argument entrant 脿 cet objet,                il utilise l'objet attente lui-m锚me pour ex茅cuter le test.            </p>            <p>                <span class="new_code">WantedPatternExpectation</span> utilise                l'expression rationnelle pour la comparaison avec son constructeur.                A chaque fois qu'une comparaison est fait 脿 travers                <span class="new_code">MockWriter</span> par rapport 脿 cette classe attente,                elle fera un <span class="new_code">preg_match()</span> avec ce motif.                Dans notre sc茅nario de test ci-dessus, aussi longtemps                que la cha卯ne "cannot connect" appara卯t dans le texte,                la fantaisie transmettra un succ猫s au testeur unitaire.                Peu importe le reste du texte.            </p>            <p>                Les classes attente possibles sont...                <table><tbody>                    <tr><td><span class="new_code">EqualExpectation</span></td><td>Une 茅galit茅, plut么t que la plus forte comparaison 脿 l'identique</td></tr>                    <tr><td><span class="new_code">NotEqualExpectation</span></td><td>Une comparaison sur la non-茅galit茅</td></tr>                    <tr><td><span class="new_code">IndenticalExpectation</span></td><td>La v茅rification par d茅faut de l'objet fantaisie qui doit correspondre exactement</td></tr>                    <tr><td><span class="new_code">NotIndenticalExpectation</span></td><td>Inverse la logique de l'objet fantaisie</td></tr>                    <tr><td><span class="new_code">WantedPatternExpectation</span></td><td>Utilise une expression rationnelle Perl pour comparer une cha卯ne</td></tr>                    <tr><td><span class="new_code">NoUnwantedPatternExpectation</span></td><td>Passe seulement si l'expression rationnelle Perl 茅choue</td></tr>                    <tr><td><span class="new_code">IsAExpectation</span></td><td>V茅rifie le type ou le nom de la classe uniquement</td></tr>                    <tr><td><span class="new_code">NotAExpectation</span></td><td>L'oppos茅 de <span class="new_code">IsAExpectation</span></td></tr>                    <tr><td><span class="new_code">MethodExistsExpectation</span></td><td>V茅rifie si la m茅thode est disponible sur un objet</td></tr>

⌨️ 快捷键说明

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