mock_objects_documentation.html.svn-base

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

SVN-BASE
779
字号
                    </tr>                </tbody></table>                O霉 les param猫tres sont...                <dl>                    <dt class="new_code">$method</dt>                    <dd>Le nom de la m茅thode, sous la forme d'une cha卯ne,                    脿 laquelle la condition doit 锚tre appliqu茅e.</dd>                    <dt class="new_code">$args</dt>                    <dd>                        Les arguments sous la forme d'une liste.                        Les jokers peuvent 锚tre inclus de la m锚me mani猫re                        qu'avec <span class="new_code">setReturn()</span>.                        Cet argument est optionnel pour <span class="new_code">expectOnce()</span>                        et <span class="new_code">expectAtLeastOnce()</span>.                    </dd>                    <dt class="new_code">$timing</dt>                    <dd>                        Le seul point dans le temps pour tester                        la condition. Le premier appel commence 脿 z茅ro.                    </dd>                    <dt class="new_code">$count</dt>                    <dd>Le nombre d'appels attendu.</dd>                </dl>                La m茅thode <span class="new_code">expectMaximumCallCount()</span>                est l茅g猫rement diff茅rente dans le sens o霉 elle ne pourra                g茅n茅rer qu'un 茅chec. Elle reste silencieuse                si la limite n'est jamais atteinte.            </p>            <p>                Par ailleurs si vous avez just un appel dans votre test,                v茅rifiez bien que vous utiliser                <span class="new_code">expectOnce</span>.<br>                Utiliser <span class="new_code">$mocked-&gt;expectAt(0, 'method', 'args);</span>                tout seul ne sera pas pris en compte :                la v茅rification des arguments et le comptage total                sont pour l'instant encore ind茅pendant.            </p>            <p>                Comme avec les assertions dans les sc茅narios de test,                toutes ces attentes peuvent accepter une surcharge de                message sous la forme d'un param猫tre suppl茅mentaire.                Par ailleurs le message d'茅chec original peut 锚tre inclus                dans le r茅sultat avec "%s".            </p>                <p><a class="target" name="approches"><h2>D'autres approches</h2></a></p>            <p>                Il existe trois approches pour cr茅er des objets                fantaisie en comprenant celle utilis茅e par SimpleTest.                Les coder 脿 la main en utilisant une classe de base,                les g茅n茅rer dans un fichier ou les g茅n茅rer dynamiquement 脿 la vol茅e.            </p>            <p>                Les objets fantaisie g茅n茅r茅s avec                <a href="simple_test.html">SimpleTest</a> sont dynamiques.                Ils sont cr茅茅s 脿 l'ex茅cution dans la m茅moire,                gr芒ce 脿 <span class="new_code">eval()</span>, plut么t qu'茅crits dans un fichier.                Cette op茅ration les rend facile 脿 cr茅er,                en une seule ligne, surtout par rapport 脿 leur cr茅ation                脿 la main dans une hi茅rarchie de classe parall猫le.                Le probl猫me avec ce comportement tient g茅n茅ralement                dans la mise en place des tests proprement dits.                Si les objets originaux changent les versions fantaisie                sur lesquels reposent les tests, une d茅synchronisation peut subvenir.                Cela peut aussi arriver avec l'approche en hi茅rarchie parall猫le,                mais c'est d茅tect茅 beaucoup plus vite.            </p>            <p>                Bien s没r, la solution est d'ajouter de v茅ritables tests d'int茅gration.                Vous n'en avez pas besoin de beaucoup                et le c么t茅 pratique des objets fantaisie fait plus                que compenser la petite dose de test suppl茅mentaire.                Vous ne pouvez pas avoir confiance dans du code qui                ne serait test茅 que par des objets fantaisie.            </p>            <p>                Si vous restez d茅termin茅 de construire des librairies                statiques d'objets fantaisie parce que vous souhaitez                茅muler un comportement tr猫s sp茅cifique,                vous pouvez y parvenir gr芒ce au g茅n茅rateur de classe de SimpleTest.                Dans votre fichier librairie, par exemple                <em>mocks/connection.php</em> pour une connexion 脿 une base de donn茅es,                cr茅er un objet fantaisie et provoquer l'h茅ritage                pour h茅riter pour surcharger des m茅thodes sp茅ciales                ou ajouter des pr茅r茅glages...<pre>&lt;?php    require_once('simpletest/mock_objects.php');    require_once('../classes/connection.php');<strong>    Mock::generate('Connection', 'BasicMockConnection');    class MockConnection extends BasicMockConnection {        function MockConnection(&amp;$test, $wildcard = '*') {            $this-&gt;BasicMockConnection($test, $wildcard);            $this-&gt;setReturn('query', false);        }    }</strong>?&gt;</pre>                L'appel <span class="new_code">generate</span> dit au g茅n茅rateur de classe                d'en cr茅er une appel茅e <span class="new_code">BasicMockConnection</span>                plut么t que la plus courante <span class="new_code">MockConnection</span>.                Ensuite nous h茅ritons 脿 partir de celle-ci pour obtenir                notre version de <span class="new_code">MockConnection</span>.                En interceptant de cette mani猫re nous pouvons ajouter                un comportement, ici transformer la valeur par d茅faut de                <span class="new_code">query()</span> en "false".                En utilisant le nom par d茅faut nous garantissons                que le g茅n茅rateur de classe fantaisie n'en recr茅era                pas une autre diff茅rente si il est invoqu茅 ailleurs                dans les tests. Il ne cr茅era jamais de classe                si elle existe d茅j脿. Aussi longtemps que le fichier                ci-dessus est inclus avant alors tous les tests qui                g茅n茅raient <span class="new_code">MockConnection</span> devraient                utiliser notre version 脿 pr茅sent. Par contre si                nous avons une erreur dans l'ordre et que la librairie                de fantaisie en cr茅e une d'abord alors la cr茅ation                de la classe 茅chouera tout simplement.            </p>            <p>                Utiliser cette astuce si vous vous trouvez avec beaucoup                de comportement en commun sur les objets fantaisie                ou si vous avez de fr茅quents probl猫mes d'int茅gration                plus tard dans les 茅tapes de test.            </p>                <p><a class="target" name="autres_testeurs"><h2>Je pense que SimpleTest pue !</h2></a></p>            <p>                Mais au moment d'茅crire ces lignes c'est le seul                脿 g茅rer les objets fantaisie, donc vous 锚tes bloqu茅 avec lui ?            </p>            <p>                Non, pas du tout.                <a href="simple_test.html">SimpleTest</a> est une bo卯te 脿 outils                et parmi ceux-ci on trouve les objets fantaisie                qui peuvent 锚tre utilis茅s ind茅pendamment.                Supposons que vous avez votre propre testeur unitaire favori                et que tous vos tests actuels l'utilisent.                Pr茅tendez que vous avez appel茅 votre tester unitaire PHPUnit                (c'est ce que tout le monde a fait) et que la classe principale                de test ressemble 脿...<pre>class PHPUnit {    function PHPUnit() {    }        function assertion($message, $assertion) {    }    ...}</pre>                La seule chose que la m茅thode <span class="new_code">assertion()</span> r茅alise,                c'est de pr茅parer une sortie embellie alors le param猫tre boolien                de l'assertion sert 脿 d茅terminer s'il s'agit d'une erreur ou d'un succ猫s.                Supposons qu'elle est utilis茅e de la mani猫re suivante...<pre>$unit_test = new PHPUnit();$unit_test&gt;assertion('I hope this file exists', file_exists('my_file'));</pre>                Comment utiliser les objets fantaisie avec ceci ?            </p>            <p>                Il y a une m茅thode prot茅g茅e sur la classe de base                des objets fantaisie : elle s'appelle <span class="new_code">_assertTrue()</span>.                En surchargeant cette m茅thode nous pouvons utiliser                notre propre format d'assertion.                Nous commen莽ons avec une sous-classe, dans <em>my_mock.php</em>...<pre><strong>&lt;?php    require_once('simpletest/mock_objects.php');        class MyMock extends SimpleMock() {        function MyMock(&amp;$test, $wildcard) {            $this-&gt;SimpleMock($test, $wildcard);        }                function _assertTrue($assertion, $message) {            $test = &amp;$this-&gt;getTest();            $test-&gt;assertion($message, $assertion);        }    }?&gt;</strong></pre>                Maintenant une instance de <span class="new_code">MyMock</span>                cr茅era un objet qui parle le m锚me langage que votre testeur.                Bien s没r le truc c'est que nous cr茅ons jamais un tel objet :                le g茅n茅rateur s'en chargera. Nous avons juste besoin                d'une ligne de code suppl茅mentaire pour dire au g茅n茅rateur                d'utiliser vos nouveaux objets fantaisie...<pre>&lt;?php    require_once('simpletst/mock_objects.php');        class MyMock extends SimpleMock() {        function MyMock($test, $wildcard) {            $this-&gt;SimpleMock(&amp;$test, $wildcard);        }                function _assertTrue($assertion, $message , &amp;$test) {            $test-&gt;assertion($message, $assertion);        }    }<strong>    SimpleTestOptions::setMockBaseClass('MyMock');</strong>?&gt;</pre>                A partir de maintenant vous avez juste 脿 inclure                <em>my_mock.php</em> 脿 la place de la version par d茅faut                <em>simple_mock.php</em> et vous pouvez introduire                des objets fantaisie dans votre suite de tests existants.            </p>            </div>        References and related information...        <ul><li>            L'article originel sur            <a href="http://www.mockobjects.com/">les objets fantaisie</a>.        </li><li>            La page du projet SimpleTest sur            <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.        </li><li>            La page d'accueil de SimpleTest sur            <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.        </li></ul><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><div class="copyright">            Copyright<br>Marcus Baker 2006        </div></body></html>

⌨️ 快捷键说明

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