index.html.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 573 行 · 第 1/2 页
SVN-BASE
573 行
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title> Prise en main rapide de SimpleTest pour PHP - Tests unitaire et objets fantaisie pour PHP </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>Prise en main rapide de SimpleTest</h1> This page... <ul><li> <a href="#unit">Utiliser le testeur rapidement</a> avec un exemple. </li><li> <a href="#group">Groupes de tests</a> pour tester en un seul clic. </li><li> <a href="#mock">Utiliser les objets fantaisie</a> pour faciliter les tests et gagner en contr么le. </li><li> <a href="#web">Tester des pages web</a> au niveau de l'HTML. </li></ul><div class="content"> <p> Le pr茅sent article pr茅suppose que vous soyez familier avec le concept de tests unitaires ainsi que celui de d茅veloppement web avec le langage PHP. Il s'agit d'un guide pour le nouvel et impatient utilisateur de <a href="https://sourceforge.net/project/showfiles.php?group_id=76550">SimpleTest</a>. Pour une documentation plus compl猫te, particuli猫rement si vous d茅couvrez les tests unitaires, consultez la <a href="http://www.lastcraft.com/unit_test_documentation.php">documentation en cours</a>, et pour des exemples de sc茅narios de test, consultez le <a href="http://www.lastcraft.com/first_test_tutorial.php">tutorial sur les tests unitaires</a>. </p> <p><a class="target" name="unit"><h2>Utiliser le testeur rapidement</h2></a></p> <p> Parmi les outils de test pour logiciel, le testeur unitaire est le plus proche du d茅veloppeur. Dans un contexte de d茅veloppement agile, le code de test se place juste 脿 c么t茅 du code source 茅tant donn茅 que tous les deux sont 茅crits simultan茅ment. Dans ce contexte, SimpleTest aspire 脿 锚tre une solution compl猫te de test pour un d茅veloppeur PHP et s'appelle "Simple" parce qu'elle devrait 锚tre simple 脿 utiliser et 脿 茅tendre. Ce nom n'茅tait pas vraiment un bon choix. Non seulement cette solution inclut toutes les fonctions classiques qu'on est en droit d'attendre de la part des portages de <a href="http://www.junit.org/">JUnit</a> et des <a href="http://sourceforge.net/projects/phpunit/">PHPUnit</a>, mais elle inclut aussi les <a href="http://www.mockobjects.com/">objets fantaisie ou "mock objects"</a>. </p> <p> Ce qui rend cet outil imm茅diatement utile pour un d茅veloppeur PHP, c'est son navigateur web interne. Il permet des tests qui parcourent des sites web, remplissent des formulaires et testent le contenu des pages. Etre capable d'茅crire ces tests en PHP veut dire qu'il devient facile d'茅crire des tests de recette (ou d'int茅gration). Un exemple serait de confirmer qu'un utilisateur a bien 茅t茅 ajout茅 dans une base de donn茅es apr猫s s'锚tre enregistr茅 sur une site web. </p> <p> La d茅monstration la plus rapide : l'exemple </p> <p> Supposons que nous sommes en train de tester une simple classe de log dans un fichier : elle s'appelle <span class="new_code">Log</span> dans <em>classes/Log.php</em>. Commen莽ons par cr茅er un script de test, appel茅 <em>tests/log_test.php</em>. Son contenu est le suivant...<pre><?php<strong>require_once('simpletest/autorun.php');</strong>require_once('../classes/log.php');class TestOfLogging extends <strong>UnitTestCase</strong> {}?></pre> Ici le r茅pertoire <em>simpletest</em> est soit dans le dossier courant, soit dans les dossiers pour fichiers inclus. Vous auriez 脿 茅diter ces arborescences suivant l'endroit o霉 vous avez install茅 SimpleTest. Le fichier "autorun.php" fait plus que juste inclure les 茅l茅ments de SimpleTest : il lance aussi les tests pour nous. </p> <p> <span class="new_code">TestOfLogging</span> est notre premier sc茅nario de test et il est pour l'instant vide. Chaque sc茅nario de test est une classe qui 茅tend une des classes de base de SimpleTest. Nous pouvons avoir autant de classes de ce type que nous voulons. </p> <p> Avec ces trois lignes d'茅chafaudage l'inclusion de notre classe <span class="new_code">Log</span>, nous avons une suite de tests. Mais pas encore de test ! </p> <p> Pour notre premier test, supposons que la classe <span class="new_code">Log</span> prenne le nom du fichier 脿 茅crire au sein du constructeur, et que nous avons un r茅pertoire temporaire dans lequel placer ce fichier.<pre><?phprequire_once('simpletest/autorun.php');require_once('../classes/log.php');class TestOfLogging extends UnitTestCase { function <strong>testLogCreatesNewFileOnFirstMessage()</strong> { @unlink('/temp/test.log'); $log = new Log('/temp/test.log'); <strong>$this->assertFalse(file_exists('/temp/test.log'));</strong> $log->message('Should write this to a file'); <strong>$this->assertTrue(file_exists('/temp/test.log'));</strong> }}?></pre> Au lancement du sc茅nario de test, toutes les m茅thodes qui commencent avec la cha卯ne <span class="new_code">test</span> sont identifi茅es puis ex茅cut茅es. Si la m茅thode commence par <span class="new_code">test</span>, c'est un test. Remarquez bien le nom tr猫s long de notre exemple : <span class="new_code">testLogCreatesNewFileOnFirstMessage()</span>. C'est bel et bien d茅lib茅r茅 : ce style est consid茅r茅 d茅sirable et il rend la sortie du test plus lisible. </p> <p> D'ordinaire nous avons bien plusieurs m茅thodes de tests. Mais ce sera pour plus tard. </p> <p> Les assertions dans les m茅thodes de test envoient des messages vers le framework de test qui affiche imm茅diatement le r茅sultat. Cette r茅ponse imm茅diate est importante, non seulement lors d'un crash caus茅 par le code, mais aussi de mani猫re 脿 rapprocher l'affichage de l'erreur au plus pr猫s du sc茅nario de test concern茅 via un appel 脿 <span class="new_code">print</span>code>. </p> <p> Pour voir ces r茅sultats lan莽ons effectivement les tests. Aucun autre code n'est n茅cessaire, il suffit d'ouvrir la page dans un navigateur. </p> <p> En cas 茅chec, l'affichage ressemble 脿... <div class="demo"> <h1>TestOfLogging</h1> <span class="fail">Fail</span>: testcreatingnewfile->True assertion failed.<br> <div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">1/1 test cases complete. <strong>1</strong> passes and <strong>1</strong> fails.</div> </div> ...et si 莽a passe, on obtient... <div class="demo"> <h1>TestOfLogging</h1> <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete. <strong>2</strong> passes and <strong>0</strong> fails.</div> </div> Et si vous obtenez 莽a... <div class="demo"> <b>Fatal error</b>: Failed opening required '../classes/log.php' (include_path='') in <b>/home/marcus/projects/lastcraft/tutorial_tests/Log/tests/log_test.php</b> on line <b>7</b> </div> c'est qu'il vous manque le fichier <em>classes/Log.php</em> qui pourrait ressembler 脿 : <pre><?php<strong>class Log { function Log($file_path) { } function message() { }}</strong>?></pre> C'est largement plus sympathique d'茅crire le code apr猫s le test. Plus que sympatique m锚me - cette technique s'appelle "D茅veloppement Pilot茅 par les Tests" ou "Test Driven Development" en anglais. </p> <p> Pour plus de renseignements sur le testeur, voyez la <a href="unit_test_documentation.html">documentation pour les tests de r茅gression</a>. </p> <p><a class="target" name="group"><h2>Construire des groupes de tests</h2></a></p> <p> Il est peu probable que dans une v茅ritable application on ait uniquement besoin de passer un seul sc茅nario de test. Cela veut dire que nous avons besoin de grouper les sc茅narios dans un script de test qui peut, si n茅cessaire, lancer tous les tests de l'application. </p> <p> Notre premi猫re 茅tape est de cr茅er un nouveau fichier appel茅 <em>tests/all_tests.php</em> et d'y inclure le code suivant...<pre><?php<strong>require_once('simpletest/autorun.php');</strong>class AllTests extends <strong>TestSuite</strong> { function AllTests() { $this->TestSuite(<strong>'All tests'</strong>); <strong>$this->addFile('log_test.php');</strong> }}?></pre> L'inclusion de "autorun" permettra 脿 notre future suite de tests d'锚tre lanc茅e juste en invoquant ce script. </p> <p> La sous-classe <span class="new_code">TestSuite</span> doit cha卯ner son constructeur. Cette limitation sera supprim茅e dans les versions 脿 venir. </p> <p> The method <span class="new_code">TestSuite::addFile()</span> will include the test case file and read any new classes that are descended from <span class="new_code">SimpleTestCase</span>. Cette m茅thode <span class="new_code">TestSuite::addTestFile()</span> va inclure le fichier de sc茅narios de test et lire parmi toutes les nouvelles classes cr茅茅es celles qui sont issues de <span class="new_code">SimpleTestCase</span>. <span class="new_code">UnitTestCase</span> est juste un exemple de classe d茅riv茅e depuis <span class="new_code">SimpleTestCase</span> et vous pouvez cr茅er les v么tres. <span class="new_code">TestSuite::addFile()</span> peut aussi inclure d'autres suites. </p> <p> La classe ne sera pas encore instanci茅e. Quand la suite de tests est lanc茅e, elle construira chaque instance une fois le test atteint, et le d茅tuira juste ensuite. Cela veut dire que le constructeur n'est lanc茅 qu'une fois avant chaque initialisation de ce sc茅nario de test et que le destructeur est lui aussi lanc茅 avant que le test suivant ne commence. </p> <p> Il est commun de grouper des sc茅narios de test dans des super-classes qui ne sont pas sens茅es 锚tre lanc茅es, mais qui deviennent une classe de base pour d'autres tests. Pour que "autorun" fonctionne proprement les fichiers des sc茅narios de test ne devraient pas lancer aveuglement d'autres extensions de sc茅narios de test qui ne lanceraient pas effectivement des tests. Cela pourrait aboutir 脿 un mauvais comptages des sc茅narios de test pendant la proc茅dure. Pas vraiement un probl猫me majeure, mais pour 茅viter cet inconv茅nient
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?