expectation_documentation.html.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 384 行 · 第 1/2 页
SVN-BASE
384 行
</tbody></table> La plupart utilisent la valeur attendue dans le constructeur. Les exceptions sont les v茅rifications sur motif, qui utilisent une expression rationnelle, ainsi que <span class="new_code">IsAExpectation</span> et <span class="new_code">NotAExpectation</span>, qui prennent un type ou un nom de classe comme cha卯ne. </p> <p><a class="target" name="comportement"><h2>Utiliser les attentes pour contr么ler les bouchons serveur</h2></a></p> <p> Les classes attente peuvent servir 脿 autre chose que l'envoi d'assertions depuis les objets fantaisie, afin de choisir le comportement d'un <a href="mock_objects_documentation.html">objet fantaisie</a> ou celui d'un <a href="server_stubs_documentation.html">bouchon serveur</a>. A chaque fois qu'une liste d'arguments est donn茅e, une liste d'objets d'attente peut 锚tre ins茅r茅e 脿 la place. </p> <p> Mettons que nous voulons qu'un bouchon serveur d'autorisation simule une connexion r茅ussie seulement si il re莽oit un objet de session valide. Nous pouvons y arriver avec ce qui suit...<pre>Stub::generate('Authorisation');<strong>$authorisation = new StubAuthorisation();$authorisation->setReturnValue( 'isAllowed', true, array(new IsAExpectation('Session', 'Must be a session')));$authorisation->setReturnValue('isAllowed', false);</strong></pre> Le comportement par d茅faut du bouchon serveur est d茅fini pour renvoyer <span class="new_code">false</span> quand <span class="new_code">isAllowed</span> est appel茅. Lorsque nous appelons cette m茅thode avec un unique param猫tre qui est un objet <span class="new_code">Session</span>, il renverra <span class="new_code">true</span>. Nous avons aussi ajout茅 un deuxi猫me param猫tre comme message. Il sera affich茅 dans le message d'erreur de l'objet fantaisie si l'attente est la cause de l'茅chec. </p> <p> Ce niveau de sophistication est rarement utile : il n'est inclut que pour 锚tre complet. </p> <p><a class="target" name="etendre"><h2>Cr茅er vos propres attentes</h2></a></p> <p> Les classes d'attentes ont une structure tr猫s simple. Tellement simple qu'il devient tr猫s simple de cr茅er vos propres version de logique pour des tests utilis茅s couramment. </p> <p> Par exemple voici la cr茅ation d'une classe pour tester la validit茅 d'adresses IP. Pour fonctionner correctement avec les bouchons serveurs et les objets fantaisie, cette nouvelle classe d'attente devrait 茅tendre <span class="new_code">SimpleExpectation</span>...<pre><strong>class ValidIp extends SimpleExpectation { function test($ip) { return (ip2long($ip) != -1); } function testMessage($ip) { return "Address [$ip] should be a valid IP address"; }}</strong></pre> Il n'y a v茅ritablement que deux m茅thodes 脿 mettre en place. La m茅thode <span class="new_code">test()</span> devrait renvoyer un <span class="new_code">true</span> si l'attente doit passer, et une erreur <span class="new_code">false</span> dans le cas contraire. La m茅thode <span class="new_code">testMessage()</span> ne devrait renvoyer que du texte utile 脿 la compr茅hension du test en lui-m锚me. </p> <p> Cette classe peut d茅sormais 锚tre employ茅e 脿 la place des classes d'attente pr茅c茅dentes. </p> <p><a class="target" name="unitaire"><h2>Sous le capot du testeur unitaire</h2></a></p> <p> Le <a href="http://sourceforge.net/projects/simpletest/">framework de test unitaire SimpleTest</a> utilise aussi dans son coeur des classes d'attente pour la <a href="unit_test_documentation.html">classe UnitTestCase</a>. Nous pouvons aussi tirer parti de ces m茅canismes pour r茅utiliser nos propres classes attente 脿 l'int茅rieur m锚me des suites de test. </p> <p> La m茅thode la plus directe est d'utiliser la m茅thode <span class="new_code">SimpleTest::assertExpectation()</span> pour effectuer le test...<pre><strong>class TestOfNetworking extends UnitTestCase { ... function testGetValidIp() { $server = &new Server(); $this->assertExpectation( new ValidIp(), $server->getIp(), 'Server IP address->%s'); }}</strong></pre> C'est plut么t sale par rapport 脿 notre syntaxe habituelle du type <span class="new_code">assert...()</span>. </p> <p> Pour un cas aussi simple, nous cr茅ons d'ordinaire une m茅thode d'assertion distincte en utilisant la classe d'attente. Supposons un instant que notre attente soit un peu plus compliqu茅e et que par cons茅quent nous souhaitions la r茅utiliser, nous obtenons...<pre>class TestOfNetworking extends UnitTestCase { ...<strong> function assertValidIp($ip, $message = '%s') { $this->assertExpectation(new ValidIp(), $ip, $message); }</strong> function testGetValidIp() { $server = &new Server();<strong> $this->assertValidIp( $server->getIp(), 'Server IP address->%s');</strong> }}</pre> Il est peu probable que nous ayons besoin de ce niveau de contr么le sur la machinerie de test. Il est assez rare que le besoin d'une attente d茅passe le stade de la reconnaissance d'un motif. De plus, les classes d'attente complexes peuvent rendre les tests difficiles 脿 lire et 脿 d茅boguer. Ces m茅canismes sont v茅ritablement l脿 pour les auteurs de syst猫me qui 茅tendront le framework de test pour leurs propres outils de test. </p> </div> References and related information... <ul><li> La page du projet SimpleTest sur <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>. </li><li> La page de t茅l茅chargement de SimpleTest sur <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>. </li><li> Les attentes imitent les contraintes dans <a href="http://www.jmock.org/">JMock</a>. </li><li> <a href="http://simpletest.org/api/">L'API compl猫te pour SimpleTest</a> r茅alis茅 avec PHPDoc. </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 + -
显示快捷键?