index.html.svn-base

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

SVN-BASE
573
字号
                il suffit de marquer vos classes de base comme <span class="new_code">abstract</span>.                SimpleTest ne lance pas les classes abstraites. Et si vous utilisez encore                PHP4 alors une directive <span class="new_code">SimpleTestOptions::ignore()</span>                dans votre fichier de sc茅nario de test aura le m锚me effet.            </p>            <p>                Par ailleurs, le fichier avec le sc茅nario de test ne devrait pas                avoir 茅t茅 inclus ailleurs. Sinon aucun sc茅nario de test                ne sera inclus 脿 ce groupe.                Ceci pourrait se transformer en un probl猫me plus grave :                si des fichiers ont d茅j脿 茅t茅 inclus par PHP alors la m茅thode                <span class="new_code">TestSuite::addFile()</span> ne les d茅tectera pas.            </p>            <p>                Pour afficher les r茅sultats, il est seulement n茅cessaire                d'invoquer <em>tests/all_tests.php</em> 脿 partir du serveur                web.            </p>            <p>                Pour plus de renseignements des groupes de tests, voyez le                <a href="group_test_documentation.html">documentation sur le groupement des tests</a>.            </p>                <p><a class="target" name="mock"><h2>Utiliser les objets fantaisie</h2></a></p>            <p>                Avan莽ons un peu plus dans le futur.            </p>            <p>                Supposons que notre class logging soit test茅e et termin茅e.                Supposons aussi que nous testons une autre classe qui ait                besoin d'茅crire des messages de log, disons                <span class="new_code">SessionPool</span>. Nous voulons tester une m茅thode                qui ressemblera probablement 脿 quelque chose comme...<pre><strong>class SessionPool {    ...    function logIn($username) {        ...        $this-&gt;_log-&gt;message('User $username logged in.');        ...    }    ...}</strong></pre>                Avec le concept de "r茅utilisation de code" comme fil                conducteur, nous utilisons notre class <span class="new_code">Log</span>. Un                sc茅nario de test classique ressemblera peut-锚tre 脿...<pre>&lt;?phprequire_once('simpletest/autorun.php');require_once('../classes/log.php');<strong>require_once('../classes/session_pool.php');</strong>class <strong>TestOfSessionLogging</strong> extends UnitTestCase {        function setUp() {        <strong>@unlink('/temp/test.log');</strong>    }        function tearDown() {        <strong>@unlink('/temp/test.log');</strong>    }        function testLoggingInIsLogged() {        <strong>$log = new Log('/temp/test.log');        $session_pool = &amp;new SessionPool($log);        $session_pool-&gt;logIn('fred');</strong>        $messages = file('/temp/test.log');        $this-&gt;assertEqual($messages[0], "User fred logged in.<strong>\n</strong>");    }}?&gt;</pre>                Nous expliquerons les m茅thodes <span class="new_code">setUp()</span>                et <span class="new_code">tearDown()</span> plus tard.            </p>            <p>                Le design de ce sc茅nario de test n'est pas compl猫tement                mauvais, mais on peut l'am茅liorer. Nous passons du temps 脿                tripoter les fichiers de log qui ne font pas partie de                notre test.                Pire, nous avons cr茅茅 des liens de proximit茅                entre la classe <span class="new_code">Log</span> et ce test. Que se                passerait-il si nous n'utilisions plus de fichiers, mais la                biblioth猫que <em>syslog</em> 脿 la place ?                                Cela veut dire que notre test <span class="new_code">TestOfSessionLogging</span>                enverra un 茅chec alors m锚me qu'il ne teste pas Logging.            </p>            <p>                Il est aussi fragile sur des petites retouches. Avez-vous                remarqu茅 le retour chariot suppl茅mentaire 脿 la fin du                message ? A-t-il 茅t茅 ajout茅 par le loggueur ? Et si il                ajoutait aussi un timestamp ou d'autres donn茅es ?            </p>            <p>                L'unique partie 脿 tester r茅ellement est l'envoi d'un                message pr茅cis au loggueur.                Nous pouvons r茅duire le couplage en                cr茅ant une fausse classe de logging : elle ne fait                qu'enregistrer le message pour le test, mais ne produit                aucun r茅sultat. Sauf qu'elle doit ressembler exactement 脿                l'original.            </p>            <p>                Si l'objet fantaisie n'茅crit pas dans un fichier alors nous                nous 茅pargnons la suppression du fichier avant et apr猫s le                test. Nous pourrions m锚me nous 茅pargner quelques lignes de                code suppl茅mentaires si l'objet fantaisie pouvait ex茅cuter                l'assertion.            <p>            </p>                Trop beau pour 锚tre vrai ? Pas vraiement on peut cr茅er un tel                objet tr猫s facilement...<pre>&lt;?phprequire_once('simpletest/autorun.php');require_once('../classes/log.php');require_once('../classes/session_pool.php');<strong>Mock::generate('Log');</strong>class TestOfSessionLogging extends UnitTestCase {        function testLoggingInIsLogged() {<strong>        $log = &amp;new MockLog();        $log-&gt;expectOnce('message', array('User fred logged in.'));</strong>        $session_pool = &amp;new SessionPool(<strong>$log</strong>);        $session_pool-&gt;logIn('fred');    }}?&gt;</pre>                L'appel <span class="new_code">Mock::generate()</span> a g茅n茅r茅                une nouvelle classe appel茅 <span class="new_code">MockLog</span>.                Cela ressemble 脿 un clone identique, sauf que nous pouvons                y adjoindre du code de test.                C'est ce que fait <span class="new_code">expectOnce()</span>.                Cela dit que si <span class="new_code">message()</span> m'est appel茅,                il a int茅r锚t 脿 l'锚tre avec le param猫tre                "User fred logged in.".            </p>            <p>                L'appel <span class="new_code">tally()</span> est n茅cessaire pour annoncer 脿                l'objet fantaisie qu'il n'y aura plus d'appels ult茅rieurs.                Sans 莽a l'objet fantaisie pourrait attendre pendant une                茅ternit茅 l'appel de la m茅thode sans jamais pr茅venir le                sc茅nario de test. Les autres tests sont d茅clench茅s                automatiquement quand l'appel 脿 <span class="new_code">message()</span> est                invoqu茅 sur l'objet <span class="new_code">MockLog</span> par le code                 <span class="new_code">SessionPool::logIn()</span>.                L'appel <span class="new_code">mock</span> va d茅clencher une comparaison des                param猫tres et ensuite envoyer le message "pass" ou "fail"                au test pour l'affichage. Des jokers peuvent 锚tre inclus                pour ne pas avoir 脿 tester tous les param猫tres d'un appel                alors que vous ne souhaitez qu'en tester un.            </p>            <p>                Les objets fantaisie dans la suite SimpleTest peuvent avoir                un ensemble de valeurs de sortie arbitraires, des s茅quences                de sorties, des valeurs de sortie s茅lectionn茅es 脿 partir                des arguments d'entr茅e, des s茅quences de param猫tres                attendus et des limites sur le nombre de fois qu'une                m茅thode peut 锚tre invoqu茅e.            </p>            <p>                Pour que ce test fonctionne la librairie avec les objets                fantaisie doit 锚tre incluse dans la suite de tests, par                exemple dans <em>all_tests.php</em>.            </p>            <p>                Pour plus de renseignements sur les objets fantaisie, voyez le                <a href="mock_objects_documentation.html">documentation sur les objets fantaisie</a>.            </p>                <p><a class="target" name="web"><h2>Tester une page web</h2></a></p>            <p>                Une des exigences des sites web, c'est qu'ils produisent                des pages web. Si vous construisez un projet de A 脿 Z et                que vous voulez int茅grer des tests au fur et 脿 mesure alors                vous voulez un outil qui puisse effectuer une navigation                automatique et en examiner le r茅sultat. C'est le boulot                d'un testeur web.            </p>            <p>                Effectuer un test web via SimpleTest reste assez primitif :                il n'y a pas de javascript par exemple.                La plupart des autres op茅rations d'un navigateur sont simul茅es.            </p>            <p>                Pour vous donner une id茅e, voici un exemple assez trivial :                aller chercher une page web,                脿 partir de l脿 naviguer vers la page "about"                et finalement tester un contenu d茅termin茅 par le client.<pre>&lt;?phprequire_once('simpletest/autorun.php');<strong>require_once('simpletest/web_tester.php');</strong>class TestOfAbout extends <strong>WebTestCase</strong> {    function testOurAboutPageGivesFreeReignToOurEgo() {        <strong>$this-&gt;get('http://test-server/index.php');        $this-&gt;click('About');        $this-&gt;assertTitle('About why we are so great');        $this-&gt;assertText('We are really great');</strong>    }}?&gt;</pre>                Avec ce code comme test de recette, vous pouvez vous                assurer que le contenu corresponde toujours aux                sp茅cifications 脿 la fois des d茅veloppeurs et des autres                parties prenantes au projet.            </p>            <p>                Vous pouvez aussi naviguer 脿 travers des formulaires...<pre>&lt;?phprequire_once('simpletest/autorun.php');require_once('simpletest/web_tester.php');class TestOfRankings extends WebTestCase {    function testWeAreTopOfGoogle() {        $this-&gt;get('http://google.com/');        $this-&gt;setField('q', 'simpletest');        $this-&gt;click("I'm Feeling Lucky");        $this-&gt;assertTitle('SimpleTest - Unit Testing for PHP');    }}?&gt;</pre>                ...m锚me si cela pourrait constituer une violation                des documents juridiques de Google(tm).            </p>            <p>                Pour plus de renseignements sur comment tester une page web, voyez la                <a href="web_tester_documentation.html">documentation sur tester des scripts web</a>.            </p>            <p>                <a href="http://sourceforge.net/projects/simpletest/"><img src="http://sourceforge.net/sflogo.php?group_id=76550&amp;type=5" width="210" height="62" border="0" alt="SourceForge.net Logo"></a>            </p>            </div>        References and related information...        <ul><li>            <a href="https://sourceforge.net/project/showfiles.php?group_id=76550&amp;release_id=153280">T茅l茅charger PHP Simple Test</a>            depuis <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.        </li><li>            L'<a href="http://simpletest.org/api/">API de SimpleTest pour d茅veloppeur</a>            donne tous les d茅tails sur les classes et assertions existantes.        </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 + -
显示快捷键?