You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(39) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(20) |
Feb
(8) |
Mar
(22) |
Apr
(14) |
May
(48) |
Jun
(29) |
Jul
(48) |
Aug
(5) |
Sep
(13) |
Oct
(5) |
Nov
(28) |
Dec
(42) |
| 2008 |
Jan
(32) |
Feb
(39) |
Mar
(60) |
Apr
(117) |
May
(9) |
Jun
(35) |
Jul
(1) |
Aug
(11) |
Sep
(38) |
Oct
(26) |
Nov
(7) |
Dec
(65) |
| 2009 |
Jan
(30) |
Feb
(22) |
Mar
(9) |
Apr
(5) |
May
(10) |
Jun
(13) |
Jul
(60) |
Aug
(9) |
Sep
(24) |
Oct
(20) |
Nov
(20) |
Dec
(28) |
| 2010 |
Jan
|
Feb
|
Mar
(11) |
Apr
(19) |
May
(7) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
|
Oct
(8) |
Nov
(8) |
Dec
(4) |
| 2011 |
Jan
|
Feb
(1) |
Mar
(3) |
Apr
(22) |
May
(7) |
Jun
(20) |
Jul
(6) |
Aug
(4) |
Sep
|
Oct
(1) |
Nov
(13) |
Dec
(4) |
| 2012 |
Jan
(14) |
Feb
|
Mar
(4) |
Apr
(14) |
May
(3) |
Jun
(4) |
Jul
(3) |
Aug
(1) |
Sep
(2) |
Oct
(4) |
Nov
(5) |
Dec
(2) |
| 2013 |
Jan
(1) |
Feb
(3) |
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
|
From: SourceForge.net <no...@so...> - 2011-08-03 09:43:47
|
Bugs item #3385457, was opened at 2011-08-03 09:43 Message generated for change (Tracker Item Submitted) made by You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3385457&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Web tester Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: transkontrol () Assigned to: Marcus Baker (lastcraft) Summary: invalid cookie host on redirect page Initial Comment: If site answer redirect to another site, and set new cookie, then this new cookie set for second site. For example, virtual dialog: > GET / Host: site1.org < HTTP/1.1 302 Found Server: nginx/0.9.3 Date: Wed, 03 Aug 2011 09:35:26 GMT Set-Cookie: kykypyky=123; expires=Tue, 03-Aug-2010 09:35:25 GMT; path=/ Location: http://site2.net/ > GET / Host: site2.net Cookie: kykypyky=123 //<- new cookie this < HTTP/1.1 302 Found Location: http://site1.org/abc/ > GET / abc/ Host: site1.org //No cookie... Simple solution this problem: $ svn diff Index: user_agent.php =================================================================== --- user_agent.php (revision 2036) +++ user_agent.php (working copy) @@ -244,14 +244,14 @@ return $response; } $headers = $response->getHeaders(); - $location = new SimpleUrl($headers->getLocation()); - $url = $location->makeAbsolute($url); if ($this->cookies_enabled) { $headers->writeCookiesToJar($this->cookie_jar, $url); } if (! $headers->isRedirect()) { break; } + $location = new SimpleUrl($headers->getLocation()); + $url = $location->makeAbsolute($url); $encoding = new SimpleGetEncoding(); } while (! $this->isTooManyRedirects(++$redirects)); return $response; ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3385457&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-07-27 05:18:31
|
Bugs item #3379382, was opened at 2011-07-27 05:18 Message generated for change (Tracker Item Submitted) made by You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3379382&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: transkontrol () Assigned to: Nobody/Anonymous (nobody) Summary: dont send "referer" header in web tests Initial Comment: Framework dont create referer header. Some time this is real problem ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3379382&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-07-25 18:08:54
|
Feature Requests item #3377385, was opened at 2011-07-25 18:08 Message generated for change (Tracker Item Submitted) made by teleyag You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3377385&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Priority: 5 Private: No Submitted By: teleyag (teleyag) Assigned to: Nobody/Anonymous (nobody) Summary: stack traces Initial Comment: I have modified the code to allow the reporter to print a stack trace for exceptions and errors. It would be great if this feature could be included in future releases as well. Would that be possible? If so, I'll create tests for it and submit a patch. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3377385&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-07-21 15:42:56
|
Bugs item #3373975, was opened at 2011-07-22 01:42 Message generated for change (Tracker Item Submitted) made by jselliot You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3373975&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: John Elliot (jselliot) Assigned to: Nobody/Anonymous (nobody) Summary: class TestGetClass extends UnitTestCase fails Initial Comment: Using SimpleTest v1.1alpha3. The following error is produced by the following code: Fatal error: Call to a member function getDumper() on a non-object in ...\simpletest\test_case.php on line 316 <?php error_reporting( E_ALL ); ini_set( 'display_errors', 'On' ); require_once( dirname( __FILE__ ) . '/../lib/simpletest/autorun.php' ); class TestGetClass extends UnitTestCase { public function testGetClass() { $this->assertTrue( true ); } } ?> The resolution is to rename the test case from "class TestGetClass" to "class Test_GetClass". I searched the simple test source code for 'GetClass' and found no references, so I'm stumped as to why the class name causes the test to fail like that. I had a TestGetClass unit-test because I was experimenting with uses of the PHP get_class function. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3373975&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-07-08 06:17:35
|
Feature Requests item #3358247, was opened at 2011-07-08 15:15 Message generated for change (Settings changed) made by iteman You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3358247&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Unit test framework Group: None Status: Open >Priority: 9 Private: No Submitted By: iteman (iteman) Assigned to: Nobody/Anonymous (nobody) Summary: Providing a way to get the test cases in a TestSuite object Initial Comment: We've developed a CLI tool (Stagehand_TestRunner) and an Eclipse plugin (MakeGood) for continuous testing. They work fine with SimpleTest 1.0.1. Now we are working on SimpleTest 1.1, but our tools fail to work with it since the test cases in a TestSuite object is not provided to external objects. SimpleTest 1.1alpha3: class TestSuite { private $label; private $test_cases; SimpleTest 1.0.1: class TestSuite { var $_label; var $_test_cases; Our Code: // For more information, please see https://github.com/piece/stagehand-testrunner/blob/master/src/Stagehand/TestRunner/TestSuite/SimpleTestTestSuite.php#L60 class Stagehand_TestRunner_TestSuite_SimpleTestTestSuite extends TestSuite { /** * @var Stagehand_TestRunner_Config */ protected $config; /** * @return integer */ public function countTests() { $testCount = 0; foreach ($this->_test_cases as $testCase) { $testCount += $this->countTestsInTestCase($testCase); } return $testCount; } We want to provide a way to get the test cases such as follows: * Providing a getter method (e.g. getTestCases()) * Or changing the visibility of the $test_cases field to protected ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3358247&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-07-08 06:15:43
|
Feature Requests item #3358247, was opened at 2011-07-08 15:15 Message generated for change (Tracker Item Submitted) made by iteman You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3358247&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Unit test framework Group: None Status: Open Priority: 5 Private: No Submitted By: iteman (iteman) Assigned to: Nobody/Anonymous (nobody) Summary: Providing a way to get the test cases in a TestSuite object Initial Comment: We've developed a CLI tool (Stagehand_TestRunner) and an Eclipse plugin (MakeGood) for continuous testing. They work fine with SimpleTest 1.0.1. Now we are working on SimpleTest 1.1, but our tools fail to work with it since the test cases in a TestSuite object is not provided to external objects. SimpleTest 1.1alpha3: class TestSuite { private $label; private $test_cases; SimpleTest 1.0.1: class TestSuite { var $_label; var $_test_cases; Our Code: // For more information, please see https://github.com/piece/stagehand-testrunner/blob/master/src/Stagehand/TestRunner/TestSuite/SimpleTestTestSuite.php#L60 class Stagehand_TestRunner_TestSuite_SimpleTestTestSuite extends TestSuite { /** * @var Stagehand_TestRunner_Config */ protected $config; /** * @return integer */ public function countTests() { $testCount = 0; foreach ($this->_test_cases as $testCase) { $testCount += $this->countTestsInTestCase($testCase); } return $testCount; } We want to provide a way to get the test cases such as follows: * Providing a getter method (e.g. getTestCases()) * Or changing the visibility of the $test_cases field to protected ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3358247&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-07-01 02:55:08
|
Support Requests item #3348402, was opened at 2011-07-01 02:55 Message generated for change (Tracker Item Submitted) made by nobody You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547456&aid=3348402&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Unit Tester Group: None Status: Open Priority: 5 Private: No Submitted By: Nobody/Anonymous (nobody) Assigned to: Marcus Baker (lastcraft) Summary: XwgV8U <a href="http://vfmzbsopqrme.com/">vfmzbsopqrme</a>, Initial Comment: XwgV8U <a href="http://vfmzbsopqrme.com/">vfmzbsopqrme</a>, [url=http://ouqxchbdiorq.com/]ouqxchbdiorq[/url], [link=http://cdhpzfrzzmae.com/]cdhpzfrzzmae[/link], http://fghwepwjydfg.com/ ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547456&aid=3348402&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-06-30 10:05:26
|
Feature Requests item #3346326, was opened at 2011-06-30 11:05 Message generated for change (Tracker Item Submitted) made by ashtonfun You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3346326&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Unit test framework Group: None Status: Open Priority: 5 Private: No Submitted By: Agoston Fung (ashtonfun) Assigned to: Nobody/Anonymous (nobody) Summary: assertEqual vs. assertEquals Initial Comment: In most unit testing frameworks I have only seen the asserting equality function as "assertEquals". In SimpleTest it is "assertEqual" without the "s" in the end which is really confusing for me. I suggest creating at least an alias called "assertEquals". ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547458&aid=3346326&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-06-14 09:56:23
|
Bugs item #3316178, was opened at 2011-06-14 05:56 Message generated for change (Tracker Item Submitted) made by kaou You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3316178&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: kaoul.kae (kaou) Assigned to: Nobody/Anonymous (nobody) Summary: Url rewrite problem with some sites Initial Comment: Hi, I found a bug in SimpleTest browser, my website is using url rewriting like this : http://www.mysite.com/index.php?article9 SimpleTest see a GET parameter and i saw in url class that it add an equal like this : http://www.mysite.com/index.php?article9= This will broke the url rewriting on the website. I already fixed this bug for myself adding : $encoded = preg_replace('/=$/', '', $encoded); url.php, line ~363 : if ($encoded) { $encoded = preg_replace('/=$/', '', $encoded); return '?' . preg_replace('/^\?/', '', $encoded); } but i'm sure you will find a great solution. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3316178&group_id=76550 |
|
From: SourceForge.net <no...@so...> - 2011-06-09 08:39:33
|
Bugs item #3312248, was opened at 2011-06-06 09:31 Message generated for change (Settings changed) made by pp11 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3312248&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Documentation Group: None >Status: Closed >Resolution: Fixed Priority: 5 Private: No Submitted By: jonathan (jonathan74) >Assigned to: Perrick Penet (pp11) Summary: Erreur de traduction (fr) - Sessions Initial Comment: Une erreur de traduction est prsente dans la documentation suivante : http://simpletest.org/fr/authentication_documentation.html Au dernier chapitre : Sessions de navigateur Il est crit dans la version franaise : La mthode WebTestCase::restart() prserve les cookies dont le timeout a expir, mais conserve les cookies temporaires ou expirs. Vous pouvez spcifier l'heure et la date de leur ractivation. Or dans la version anglaise, on trouve ceci : The WebTestCase::restart() method will preserve cookies that have unexpired timeouts, but throw away those that are temporary or expired. You can optionally specify the time and date that the restart happened. Je pense qu'il y a une erreur dans la version traduite (fr), je l'aurai plutt vu comme ceci : "La mthode WebTestCase::restart() prserve les cookies dont le timeout n'a pas expir, mais jette les cookies temporaires ou expirs." ---------------------------------------------------------------------- >Comment By: Perrick Penet (pp11) Date: 2011-06-09 10:39 Message: Merci pour le rapport de bogue. C'est corrig dans le SVN dsormais. Et donc a devrait tre publi trs prochainement sur simpletest.org... ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3312248&group_id=76550 |
|
From: <pp...@us...> - 2011-06-09 08:37:54
|
Revision: 2036
http://simpletest.svn.sourceforge.net/simpletest/?rev=2036&view=rev
Author: pp11
Date: 2011-06-09 08:37:45 +0000 (Thu, 09 Jun 2011)
Log Message:
-----------
Fixing the bug report 3312248 -- Erreur de traduction (fr) - Sessions -- by jonathan74
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/authentication_documentation.xml
Modified: simpletest/trunk/docs/source/fr/authentication_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/fr/authentication_documentation.xml 2011-06-08 21:53:41 UTC (rev 2035)
+++ simpletest/trunk/docs/source/fr/authentication_documentation.xml 2011-06-09 08:37:45 UTC (rev 2036)
@@ -247,8 +247,9 @@
}
}
]]></php>
- La m\xE9thode <code>WebTestCase::restart()</code> pr\xE9serve les cookies
- dont le timeout a expir\xE9, mais conserve les cookies temporaires ou expir\xE9s.
+ La m\xE9thode <code>WebTestCase::restart()</code> pr\xE9serve
+ les cookies dont le timeout n'a pas expir\xE9,
+ mais jette les cookies temporaires ou expir\xE9s.
Vous pouvez sp\xE9cifier l'heure et la date de leur r\xE9activation.
</p>
<p>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 21:53:47
|
Revision: 2035
http://simpletest.svn.sourceforge.net/simpletest/?rev=2035&view=rev
Author: pp11
Date: 2011-06-08 21:53:41 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
Getting the doc generator back in shape for publishing online to SimpleTest.org - including the italian files !
Modified Paths:
--------------
simpletest/trunk/packages/simpletest.org/index.php
simpletest/trunk/packages/simpletest.org/map.xml
simpletest/trunk/packages/simpletest.org/package.php
Modified: simpletest/trunk/packages/simpletest.org/index.php
===================================================================
--- simpletest/trunk/packages/simpletest.org/index.php 2011-06-08 21:51:35 UTC (rev 2034)
+++ simpletest/trunk/packages/simpletest.org/index.php 2011-06-08 21:53:41 UTC (rev 2035)
@@ -13,7 +13,7 @@
$source_path = dirname(__FILE__).'/../../docs/source/';
$destination_path = dirname(__FILE__).'/../../docs/simpletest.org/';
-$languages = array("en/", "fr/", "../../");
+$languages = array("en/", "fr/", "it/", "../../");
foreach ($languages as $language) {
$dir = opendir($source_path.$language);
Modified: simpletest/trunk/packages/simpletest.org/map.xml
===================================================================
--- simpletest/trunk/packages/simpletest.org/map.xml 2011-06-08 21:51:35 UTC (rev 2034)
+++ simpletest/trunk/packages/simpletest.org/map.xml 2011-06-08 21:53:41 UTC (rev 2035)
@@ -85,8 +85,8 @@
</page>
</page>
<page title="Versione italiana" here="Version italiana" file="it/index.html">
- <page title="Télécharger SimpleTest" here="Télécharger SimpleTest" file="it/download.html">
- <page title="Installer le plugin Eclipse" here="Plugin Eclipse" file="it/extension_eclipse.html" />
+ <page title="Scaricare SimpleTest" here="Scaricare SimpleTest" file="it/download.html">
+ <page title="Installare il plugin Eclipse" here="Installare il plugin Eclipse" file="it/extension_eclipse.html" />
</page>
<page title="Scrivere test con SimpleTest" here="Scrivere test con SimpleTest" file="it/start-testing.html" >
@@ -114,8 +114,8 @@
</page>
<page title="La Mailing-list" here="La Mailing-list" file="it/support.html">
- <page title="Libri" here="Libri" file="it/books.html" />
- <page title="Logiciels" here="Logiciels" file="it/logiciels_utilisant_simpletest.html" />
+ <page title="Dei libri" here="Dei libri" file="it/books.html" />
+ <page title="Dei software" here="Dei software" file="it/logiciels_utilisant_simpletest.html" />
</page>
</page>
Modified: simpletest/trunk/packages/simpletest.org/package.php
===================================================================
--- simpletest/trunk/packages/simpletest.org/package.php 2011-06-08 21:51:35 UTC (rev 2034)
+++ simpletest/trunk/packages/simpletest.org/package.php 2011-06-08 21:53:41 UTC (rev 2035)
@@ -3,7 +3,9 @@
class SimpleTestXMLElement extends SimpleXMLElement {
function title() {
$titles = $this->xpath('//page');
- return $titles[0]->attributes()->title;
+ if (isset($titles[0])) {
+ return $titles[0]->attributes()->title;
+ }
}
function transform_code($code) {
@@ -212,7 +214,9 @@
function here() {
$pages = $this->xpath('//page');
- return $pages[0]->attributes()->here;
+ if (isset($pages[0])) {
+ return $pages[0]->attributes()->here;
+ }
}
function parent($map) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 21:51:42
|
Revision: 2034
http://simpletest.svn.sourceforge.net/simpletest/?rev=2034&view=rev
Author: pp11
Date: 2011-06-08 21:51:35 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
Preparing the doc source tree for web publication
Modified Paths:
--------------
simpletest/trunk/docs/source/en/changelog.xml
simpletest/trunk/docs/source/en/coding_standards.xml
simpletest/trunk/docs/source/en/heartbeat.xml
simpletest/trunk/docs/source/en/ideas.xml
simpletest/trunk/docs/source/en/photos_stream.xml
simpletest/trunk/docs/source/en/screencasts.xml
simpletest/trunk/docs/source/en/softwares_using_simpletest.xml
simpletest/trunk/docs/source/en/speakers_coaches_consultancy.xml
simpletest/trunk/docs/source/en/writing_extensions.xml
simpletest/trunk/docs/source/fr/logiciels_utilisant_simpletest.xml
simpletest/trunk/docs/source/it/about.xml
simpletest/trunk/docs/source/it/authentication_documentation.xml
simpletest/trunk/docs/source/it/books_website.xml
simpletest/trunk/docs/source/it/boundary_classes_tutorial.xml
simpletest/trunk/docs/source/it/browser_documentation.xml
simpletest/trunk/docs/source/it/changelog.xml
simpletest/trunk/docs/source/it/coding_standards.xml
simpletest/trunk/docs/source/it/display_subclass_tutorial.xml
simpletest/trunk/docs/source/it/download_website.xml
simpletest/trunk/docs/source/it/expectation_documentation.xml
simpletest/trunk/docs/source/it/experimental_dom_tester.xml
simpletest/trunk/docs/source/it/experimental_intro.xml
simpletest/trunk/docs/source/it/experimental_recorder.xml
simpletest/trunk/docs/source/it/extension_eclipse.xml
simpletest/trunk/docs/source/it/first_test_tutorial.xml
simpletest/trunk/docs/source/it/form_testing_documentation.xml
simpletest/trunk/docs/source/it/gain_control_tutorial.xml
simpletest/trunk/docs/source/it/group_test_documentation.xml
simpletest/trunk/docs/source/it/group_test_tutorial.xml
simpletest/trunk/docs/source/it/heartbeat.xml
simpletest/trunk/docs/source/it/ideas.xml
simpletest/trunk/docs/source/it/improving_design_tutorial.xml
simpletest/trunk/docs/source/it/index.xml
simpletest/trunk/docs/source/it/intro.xml
simpletest/trunk/docs/source/it/mock_objects_documentation.xml
simpletest/trunk/docs/source/it/mock_objects_tutorial.xml
simpletest/trunk/docs/source/it/overview.xml
simpletest/trunk/docs/source/it/partial_mocks_documentation.xml
simpletest/trunk/docs/source/it/photos_stream.xml
simpletest/trunk/docs/source/it/reporter_documentation.xml
simpletest/trunk/docs/source/it/screencasts.xml
simpletest/trunk/docs/source/it/simple_test.xml
simpletest/trunk/docs/source/it/softwares_using_simpletest.xml
simpletest/trunk/docs/source/it/speakers_coaches_consultancy.xml
simpletest/trunk/docs/source/it/subclass_tutorial.xml
simpletest/trunk/docs/source/it/support_website.xml
simpletest/trunk/docs/source/it/unit_test_documentation.xml
simpletest/trunk/docs/source/it/web_tester_documentation.xml
simpletest/trunk/docs/source/it/writing_extensions.xml
Property Changed:
----------------
simpletest/trunk/docs/source/en/changelog.xml
simpletest/trunk/docs/source/en/coding_standards.xml
simpletest/trunk/docs/source/en/heartbeat.xml
simpletest/trunk/docs/source/en/ideas.xml
simpletest/trunk/docs/source/en/photos_stream.xml
simpletest/trunk/docs/source/en/screencasts.xml
simpletest/trunk/docs/source/en/softwares_using_simpletest.xml
simpletest/trunk/docs/source/en/speakers_coaches_consultancy.xml
simpletest/trunk/docs/source/en/writing_extensions.xml
simpletest/trunk/docs/source/fr/logiciels_utilisant_simpletest.xml
simpletest/trunk/docs/source/it/about.xml
simpletest/trunk/docs/source/it/authentication_documentation.xml
simpletest/trunk/docs/source/it/books_website.xml
simpletest/trunk/docs/source/it/boundary_classes_tutorial.xml
simpletest/trunk/docs/source/it/browser_documentation.xml
simpletest/trunk/docs/source/it/changelog.xml
simpletest/trunk/docs/source/it/coding_standards.xml
simpletest/trunk/docs/source/it/display_subclass_tutorial.xml
simpletest/trunk/docs/source/it/download_website.xml
simpletest/trunk/docs/source/it/expectation_documentation.xml
simpletest/trunk/docs/source/it/experimental_dom_tester.xml
simpletest/trunk/docs/source/it/experimental_intro.xml
simpletest/trunk/docs/source/it/experimental_recorder.xml
simpletest/trunk/docs/source/it/extension_eclipse.xml
simpletest/trunk/docs/source/it/first_test_tutorial.xml
simpletest/trunk/docs/source/it/form_testing_documentation.xml
simpletest/trunk/docs/source/it/gain_control_tutorial.xml
simpletest/trunk/docs/source/it/group_test_documentation.xml
simpletest/trunk/docs/source/it/group_test_tutorial.xml
simpletest/trunk/docs/source/it/heartbeat.xml
simpletest/trunk/docs/source/it/ideas.xml
simpletest/trunk/docs/source/it/improving_design_tutorial.xml
simpletest/trunk/docs/source/it/index.xml
simpletest/trunk/docs/source/it/intro.xml
simpletest/trunk/docs/source/it/mock_objects_documentation.xml
simpletest/trunk/docs/source/it/mock_objects_tutorial.xml
simpletest/trunk/docs/source/it/overview.xml
simpletest/trunk/docs/source/it/partial_mocks_documentation.xml
simpletest/trunk/docs/source/it/photos_stream.xml
simpletest/trunk/docs/source/it/reporter_documentation.xml
simpletest/trunk/docs/source/it/screencasts.xml
simpletest/trunk/docs/source/it/simple_test.xml
simpletest/trunk/docs/source/it/softwares_using_simpletest.xml
simpletest/trunk/docs/source/it/speakers_coaches_consultancy.xml
simpletest/trunk/docs/source/it/subclass_tutorial.xml
simpletest/trunk/docs/source/it/support_website.xml
simpletest/trunk/docs/source/it/unit_test_documentation.xml
simpletest/trunk/docs/source/it/web_tester_documentation.xml
simpletest/trunk/docs/source/it/writing_extensions.xml
Modified: simpletest/trunk/docs/source/en/changelog.xml
===================================================================
--- simpletest/trunk/docs/source/en/changelog.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/changelog.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: authentication_documentation.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="SimpleTest's Changelog" here="Changelog">
<long_title>SimpleTest's Changelog</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/changelog.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/coding_standards.xml
===================================================================
--- simpletest/trunk/docs/source/en/coding_standards.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/coding_standards.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: authentication.php 1672 2008-03-02 04:47:34Z edwardzyang $ -->
+<!-- $Id$ -->
<page title="Coding Standards and Formatting" here="Coding Standards">
<long_title>Coding Standards within SimpleTest</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/coding_standards.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/heartbeat.xml
===================================================================
--- simpletest/trunk/docs/source/en/heartbeat.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/heartbeat.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="Heartbeat" here="Heartbeat">
<long_title>Heartbeat : how is SimpleTest doing ?</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/heartbeat.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/ideas.xml
===================================================================
--- simpletest/trunk/docs/source/en/ideas.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/ideas.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="Ideas for Google Summer of Code projects" here="Ideas for GSOC">
<long_title>Ideas for Google Summer of Code Projects</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/ideas.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/photos_stream.xml
===================================================================
--- simpletest/trunk/docs/source/en/photos_stream.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/photos_stream.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="Tagged 'SimpleTest'" here="Photos stream">
<long_title>Photos & pictures tagged SimpleTest</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/photos_stream.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/screencasts.xml
===================================================================
--- simpletest/trunk/docs/source/en/screencasts.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/screencasts.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: subclass_tutorial.xml 1687 2008-03-06 13:05:45Z pp11 $ -->
+<!-- $Id$ -->
<page title="Screencasts : Basic and Advanced TDD using SimpleTest" here="Screencasts">
<long_title>Screencasts : Basic and Advanced TDD using SimpleTest</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/screencasts.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/softwares_using_simpletest.xml
===================================================================
--- simpletest/trunk/docs/source/en/softwares_using_simpletest.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/softwares_using_simpletest.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="Softwares" here="Softwares">
<long_title>Softwares using SimpleTest</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/softwares_using_simpletest.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/speakers_coaches_consultancy.xml
===================================================================
--- simpletest/trunk/docs/source/en/speakers_coaches_consultancy.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/speakers_coaches_consultancy.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="Speakers, coaches and consultants" here="Speakers">
<long_title>Speakers, coaches and consultants</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/speakers_coaches_consultancy.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/en/writing_extensions.xml
===================================================================
--- simpletest/trunk/docs/source/en/writing_extensions.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/en/writing_extensions.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="Writing an extension for SimpleTest" here="Writing an extension">
<long_title>Writing an extension for SimpleTest</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/en/writing_extensions.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/fr/logiciels_utilisant_simpletest.xml
===================================================================
--- simpletest/trunk/docs/source/fr/logiciels_utilisant_simpletest.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/fr/logiciels_utilisant_simpletest.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
+<!-- $Id$ -->
<page title="Logiciels" here="Logiciels">
<long_title>Logiciels utilisant SimpleTest</long_title>
<content>
Property changes on: simpletest/trunk/docs/source/fr/logiciels_utilisant_simpletest.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/about.xml
===================================================================
--- simpletest/trunk/docs/source/it/about.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/about.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: about.xml 1803 2008-09-08 11:11:03Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Informazioni su Last Craft" here="Informazioni su Last Craft">
- <synchronisation lang="en" version="1684" date="19/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Informazioni su Last Craft</long_title>
<content>
<section name="me" title="People">
Property changes on: simpletest/trunk/docs/source/it/about.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/authentication_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/authentication_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/authentication_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: authentication_documentation.xml 1803 2008-09-08 11:11:03Z lastcraft $ -->
+<!-- $Id$ -->
<page title="L'autenticazione" here="L'autenticazione">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest documentation for testing log-in and authentication</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/authentication_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/books_website.xml
===================================================================
--- simpletest/trunk/docs/source/it/books_website.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/books_website.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,7 +1,8 @@
<?xml version="1.0"?>
-<!-- $Id: books_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="Books" here="Books">
- <long_title>Books in and around SimpleTest</long_title>
+<!-- $Id$ -->
+<page title="Dei libri" here="Dei libri">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
+ <long_title>Books in and around SimpleTest</long_title>
<content>
<section name="latest-recommandation" title="Latest recommandation">
<p>
Property changes on: simpletest/trunk/docs/source/it/books_website.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/boundary_classes_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/boundary_classes_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/boundary_classes_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: boundary_classes_tutorial.xml 1879 2009-06-12 16:41:44Z pp11 $ -->
+<!-- $Id$ -->
<page title="Le classi boundary" here="Tutorial: le classi boundary">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
PHP unit testing tutorial - Organising unit tests and "setup tests"
</long_title>
Property changes on: simpletest/trunk/docs/source/it/boundary_classes_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/browser_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/browser_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/browser_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: browser_documentation.xml 1803 2008-09-08 11:11:03Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Scripting del browser" here="Scripting del browser">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest documentation for the scriptable web browser component</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/browser_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/changelog.xml
===================================================================
--- simpletest/trunk/docs/source/it/changelog.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/changelog.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: authentication_documentation.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="SimpleTest's Changelog" here="Changelog">
+<!-- $Id$ -->
+<page title="Il changelog di SimpleTest" here="Il changelog">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest's Changelog</long_title>
<content>
<section name="version1.0.1" title="SimpleTest Version 1.0.1">
Property changes on: simpletest/trunk/docs/source/it/changelog.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/coding_standards.xml
===================================================================
--- simpletest/trunk/docs/source/it/coding_standards.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/coding_standards.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: authentication.php 1672 2008-03-02 04:47:34Z edwardzyang $ -->
-<page title="Coding Standards and Formatting" here="Coding Standards">
+<!-- $Id$ -->
+<page title="I standardi per il coding e il formatting" here="I standardi per il coding">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Coding Standards within SimpleTest</long_title>
<content>
<section name="coding-standards" title="Coding standards">
Property changes on: simpletest/trunk/docs/source/it/coding_standards.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/display_subclass_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/display_subclass_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/display_subclass_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: display_subclass_tutorial.xml 1876 2009-06-12 16:30:24Z pp11 $ -->
+<!-- $Id$ -->
<page title="Visualizzare i risultati" here="Tutorial: visualizzare i risultati">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>PHP unit testing tutorial - Subclassing the test display</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/display_subclass_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/download_website.xml
===================================================================
--- simpletest/trunk/docs/source/it/download_website.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/download_website.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1942 2009-08-10 10:11:14Z pp11 $ -->
-<page title="Downloading SimpleTest" here="Download SimpleTest">
+<!-- $Id$ -->
+<page title="Scaricare SimpleTest" here="Scaricare SimpleTest">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Downloading SimpleTest</long_title>
<content>
<section name="current-release" title="Current release">
Property changes on: simpletest/trunk/docs/source/it/download_website.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/expectation_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/expectation_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/expectation_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: expectation_documentation.xml 1873 2009-06-12 16:12:18Z pp11 $ -->
+<!-- $Id$ -->
<page title="Le expectation" here="Le expectation">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
Estendere lo unit tester di SimpleTest con nuove classi expectation.
</long_title>
Property changes on: simpletest/trunk/docs/source/it/expectation_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/experimental_dom_tester.xml
===================================================================
--- simpletest/trunk/docs/source/it/experimental_dom_tester.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/experimental_dom_tester.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: experimental_dom_tester.xml 1807 2008-09-09 06:58:00Z pp11 $ -->
-<page title="Testing elements by CSS selector" here="DOM tester">
+<!-- $Id$ -->
+<page title="Testare elementi con seletori CSS" here="Il DOM tester">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>[experimental] Testing elements by CSS selector</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/experimental_dom_tester.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/experimental_intro.xml
===================================================================
--- simpletest/trunk/docs/source/it/experimental_intro.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/experimental_intro.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: experimental_intro.xml 1876 2009-06-12 16:30:24Z pp11 $ -->
-<page title="Experimental stuff (in SVN only)" here="Experimental stuff">
+<!-- $Id$ -->
+<page title="Cose sperimentale (solo nello SVN)" here="Cose sperimentale">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Experimental stuff, found in SVN only</long_title>
<content>
<section name="intro" title="Why only in SVN">
Property changes on: simpletest/trunk/docs/source/it/experimental_intro.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/experimental_recorder.xml
===================================================================
--- simpletest/trunk/docs/source/it/experimental_recorder.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/experimental_recorder.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: experimental_recorder.xml 1878 2009-06-12 16:39:37Z pp11 $ -->
-<page title="Using the test results for other tools" here="Recorder">
+<!-- $Id$ -->
+<page title="Utilizare i risultatti per altri utili" here="Il plugin Recorder">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>[experimental] Using the test results for other tools with the Recorder</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/experimental_recorder.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/extension_eclipse.xml
===================================================================
--- simpletest/trunk/docs/source/it/extension_eclipse.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/extension_eclipse.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: extension_eclipse.xml 1878 2009-06-12 16:39:37Z pp11 $ -->
-<page title="Simpletest Eclipse Plugin" here="Eclipse">
+<!-- $Id$ -->
+<page title="Il plugin Simpletest per Eclipse" here="Plugin Eclipse per SimpleTest">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Simpletest Eclipse Plugin Documentation</long_title>
<content>
<section name="compat" title="Compatibility">
Property changes on: simpletest/trunk/docs/source/it/extension_eclipse.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/first_test_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/first_test_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/first_test_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: first_test_tutorial.xml 1941 2009-08-10 10:09:32Z pp11 $ -->
+<!-- $Id$ -->
<page title="Tutorial: unit testing con SimpleTest" here="Tutorial: unit testing con SimpleTest">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>PHP unit testing tutorial - Creating an example test case in PHP</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/first_test_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/form_testing_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/form_testing_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/form_testing_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: form_testing_documentation.xml 1812 2008-09-27 01:46:42Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Il collaudo di form" here="Il collaudo di form">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest documentation for testing HTML forms</long_title>
<content>
<section name="submit" title="Modificare i valori dei form ed eseguire il submit di un semplice form">
Property changes on: simpletest/trunk/docs/source/it/form_testing_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/gain_control_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/gain_control_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/gain_control_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: gain_control_tutorial.xml 1867 2009-03-05 15:49:54Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Prendere il controllo dei test" here="Tutorial: prendere il controllo">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>PHP unit testing tutorial - Isolating variables when testing</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/gain_control_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/group_test_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/group_test_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/group_test_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: group_test_documentation.xml 1878 2009-06-12 16:39:37Z pp11 $ -->
+<!-- $Id$ -->
<page title="Raggruppamento di test" here="Raggruppamento di test">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest for PHP test suites</long_title>
<content>
<section name="group" title="Raggruppare i test in suite">
Property changes on: simpletest/trunk/docs/source/it/group_test_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/group_test_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/group_test_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/group_test_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: group_test_tutorial.xml 1867 2009-03-05 15:49:54Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Raggruppamento di test" here="Tutorial: Raggruppamento di test">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
PHP unit testing tutorial - Grouping together unit
tests and examples of writing test cases
Property changes on: simpletest/trunk/docs/source/it/group_test_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/heartbeat.xml
===================================================================
--- simpletest/trunk/docs/source/it/heartbeat.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/heartbeat.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="Heartbeat" here="Heartbeat">
+<!-- $Id$ -->
+<page title="Colpo di cuore" here="Colpo di cuore">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Heartbeat : how is SimpleTest doing ?</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/heartbeat.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/ideas.xml
===================================================================
--- simpletest/trunk/docs/source/it/ideas.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/ideas.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="Ideas for Google Summer of Code projects" here="Ideas for GSOC">
+<!-- $Id$ -->
+<page title="Idee per il Google Summer of Code projects" here="Idee per GSOC">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Ideas for Google Summer of Code Projects</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/ideas.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/improving_design_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/improving_design_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/improving_design_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: improving_design_tutorial.xml 1873 2009-06-12 16:12:18Z pp11 $ -->
+<!-- $Id$ -->
<page title="Test con l'approccio top-down" here="Tutorial: test con l'approccio top-down">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
PHP unit testing tutorial - Top down design
test first with mock objects
Property changes on: simpletest/trunk/docs/source/it/improving_design_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/index.xml
===================================================================
--- simpletest/trunk/docs/source/it/index.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/index.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: index.xml 1867 2009-03-05 15:49:54Z lastcraft $ -->
-<page title="The Last Craft?" here="Last Craft">
+<!-- $Id$ -->
+<page title="L'ultima Craft ?" here="L'ultima Craft">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
The Last Craft? Web developer tutorials on PHP, Extreme programming
and Object Oriented development
Property changes on: simpletest/trunk/docs/source/it/index.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/intro.xml
===================================================================
--- simpletest/trunk/docs/source/it/intro.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/intro.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: intro.xml 1867 2009-03-05 15:49:54Z lastcraft $ -->
-<page title="Introduction to SimpleTest" here="English version">
+<!-- $Id$ -->
+<page title="Introduzione a SimpleTest" here="Versione italiana">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
Summary of SimpleTest including it's Java tool roots.
</long_title>
Property changes on: simpletest/trunk/docs/source/it/intro.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/mock_objects_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/mock_objects_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/mock_objects_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: mock_objects_documentation.xml 1890 2009-07-26 12:09:04Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Gli oggetti mock" here="Gli oggetti mock">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest for PHP mock objects documentation</long_title>
<content>
<section name="what" title="Cosa sono gli oggetti mock?">
Property changes on: simpletest/trunk/docs/source/it/mock_objects_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/mock_objects_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/mock_objects_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/mock_objects_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: mock_objects_tutorial.xml 1891 2009-07-26 12:32:26Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Gli oggetti mock" here="Tutorial: gli oggetti mock">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>PHP unit testing tutorial - Using mock objects in PHP</long_title>
<content>
<section name="refactor" title="Refactoring the tests again">
Property changes on: simpletest/trunk/docs/source/it/mock_objects_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/overview.xml
===================================================================
--- simpletest/trunk/docs/source/it/overview.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/overview.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: overview.xml 1893 2009-07-26 13:52:26Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Panoramica su SimpleTest" here="Panoramica su SimpleTest">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
Panoramica ed elenco delle caratteristiche dello unit tester e del web tester di SimpleTest
</long_title>
Property changes on: simpletest/trunk/docs/source/it/overview.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/partial_mocks_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/partial_mocks_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/partial_mocks_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: partial_mocks_documentation.xml 1874 2009-06-12 16:17:51Z pp11 $ -->
+<!-- $Id$ -->
<page title="Il mocking parziale" here="Il mocking parziale">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest for PHP partial mocks documentation</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/partial_mocks_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/photos_stream.xml
===================================================================
--- simpletest/trunk/docs/source/it/photos_stream.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/photos_stream.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="Tagged 'SimpleTest'" here="Photos stream">
+<!-- $Id$ -->
+<page title="Col tag 'SimpleTest'" here="Col tag 'SimpleTest'">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Photos & pictures tagged SimpleTest</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/photos_stream.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/reporter_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/reporter_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/reporter_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: reporter_documentation.xml 1878 2009-06-12 16:39:37Z pp11 $ -->
+<!-- $Id$ -->
<page title="I report" here="I report">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest for PHP test runner and display documentation</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/reporter_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/screencasts.xml
===================================================================
--- simpletest/trunk/docs/source/it/screencasts.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/screencasts.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: subclass_tutorial.xml 1687 2008-03-06 13:05:45Z pp11 $ -->
-<page title="Screencasts : Basic and Advanced TDD using SimpleTest" here="Screencasts">
+<!-- $Id$ -->
+<page title="Dei screencasts : TDD basico e elaborato con SimpleTest" here="Dei screencasts">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Screencasts : Basic and Advanced TDD using SimpleTest</long_title>
<content>
<section name="screencast" title="Basic and Advanced TDD in PHP Demo">
Property changes on: simpletest/trunk/docs/source/it/screencasts.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/simple_test.xml
===================================================================
--- simpletest/trunk/docs/source/it/simple_test.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/simple_test.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: simple_test.xml 1876 2009-06-12 16:30:24Z pp11 $ -->
+<!-- $Id$ -->
<page title="Scrivere test con SimpleTest" here="Scrivere test con SimpleTest">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>
Download the SimpleTest testing framework -
Unit tests and mock objects for PHP
Property changes on: simpletest/trunk/docs/source/it/simple_test.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/softwares_using_simpletest.xml
===================================================================
--- simpletest/trunk/docs/source/it/softwares_using_simpletest.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/softwares_using_simpletest.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="Softwares" here="Softwares">
+<!-- $Id$ -->
+<page title="Dei software" here="Dei software">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Softwares using SimpleTest</long_title>
<content>
<section name="projects-extending-simpletest" title="Projects extending SimpleTest">
Property changes on: simpletest/trunk/docs/source/it/softwares_using_simpletest.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/speakers_coaches_consultancy.xml
===================================================================
--- simpletest/trunk/docs/source/it/speakers_coaches_consultancy.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/speakers_coaches_consultancy.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="Speakers, coaches and consultants" here="Speakers">
+<!-- $Id$ -->
+<page title="Speakers, coaches e consulenti" here="Speakers, coaches e consulenti">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Speakers, coaches and consultants</long_title>
<content>
<section name="whole" title="Providing the whole solution">
Property changes on: simpletest/trunk/docs/source/it/speakers_coaches_consultancy.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/subclass_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/it/subclass_tutorial.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/subclass_tutorial.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: subclass_tutorial.xml 1878 2009-06-12 16:39:37Z pp11 $ -->
+<!-- $Id$ -->
<page title="Il riutilizzo dei casi" here="Tutorial: il riutilizzo dei casi">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>PHP unit testing tutorial - Subclassing a test case</long_title>
<content>
<section name="time" title="Un assert indipendente dal tempo">
Property changes on: simpletest/trunk/docs/source/it/subclass_tutorial.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/support_website.xml
===================================================================
--- simpletest/trunk/docs/source/it/support_website.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/support_website.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: support_website.xml 1732 2008-04-08 18:47:55Z pp11 $ -->
-<page title="Support mailing list" here="Support mailing list">
+<!-- $Id$ -->
+<page title="La Mailing-list" here="La Mailing-list">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Support mailing list</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/support_website.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/unit_test_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/unit_test_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/unit_test_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: unit_test_documentation.xml 1882 2009-07-01 14:30:05Z lastcraft $ -->
+<!-- $Id$ -->
<page title="Lo Unit Test" here="Lo Unit Test">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Documentazione sui test di regressione con SimpleTest per PHP</long_title>
<content>
<section name="unit" title="Gli Unit Test Case">
Property changes on: simpletest/trunk/docs/source/it/unit_test_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/web_tester_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/it/web_tester_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/web_tester_documentation.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: web_tester_documentation.xml 1876 2009-06-12 16:30:24Z pp11 $ -->
+<!-- $Id$ -->
<page title="Il web test" here="Il web test">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>SimpleTest for PHP web script testing documentation</long_title>
<content>
<section name="fetch" title="Recuperare una pagina">
Property changes on: simpletest/trunk/docs/source/it/web_tester_documentation.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Modified: simpletest/trunk/docs/source/it/writing_extensions.xml
===================================================================
--- simpletest/trunk/docs/source/it/writing_extensions.xml 2011-06-08 21:12:40 UTC (rev 2033)
+++ simpletest/trunk/docs/source/it/writing_extensions.xml 2011-06-08 21:51:35 UTC (rev 2034)
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
-<!-- $Id: download_website.xml 1684 2008-03-06 08:36:59Z pp11 $ -->
-<page title="Writing an extension for SimpleTest" here="Writing an extension">
+<!-- $Id$ -->
+<page title="Scrivere estensioni per SimpleTest" here="Scrivere estensioni">
+ <synchronisation lang="en" version="0" date="08/06/2011" maintainer="arialdomartini" />
<long_title>Writing an extension for SimpleTest</long_title>
<content>
<introduction>
Property changes on: simpletest/trunk/docs/source/it/writing_extensions.xml
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 21:12:46
|
Revision: 2033
http://simpletest.svn.sourceforge.net/simpletest/?rev=2033&view=rev
Author: pp11
Date: 2011-06-08 21:12:40 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch X
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/web_tester_documentation.xml
Modified: simpletest/trunk/docs/source/fr/web_tester_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/fr/web_tester_documentation.xml 2011-06-08 21:10:20 UTC (rev 2032)
+++ simpletest/trunk/docs/source/fr/web_tester_documentation.xml 2011-06-08 21:12:40 UTC (rev 2033)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur le testeur web" here="Le testeur web">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1876" date="08/06/2011" maintainer="pp11" />
<long_title>Documentation SimpleTest : tester des scripts web</long_title>
<content>
<section name="telecharger" title="T\xE9l\xE9charger une page">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 21:10:26
|
Revision: 2032
http://simpletest.svn.sourceforge.net/simpletest/?rev=2032&view=rev
Author: pp11
Date: 2011-06-08 21:10:20 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch IX
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/unit_test_documentation.xml
Modified: simpletest/trunk/docs/source/fr/unit_test_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/fr/unit_test_documentation.xml 2011-06-08 20:59:02 UTC (rev 2031)
+++ simpletest/trunk/docs/source/fr/unit_test_documentation.xml 2011-06-08 21:10:20 UTC (rev 2032)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur les tests unitaires en PHP" here="Documentation : les tests unitaires en PHP">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1946" date="08/06/2011" maintainer="pp11" />
<long_title>Documentation SimpleTest pour les tests de r\xE9gression en PHP</long_title>
<content>
<section name="unitaire" title="Sc\xE9narios de tests unitaires">
@@ -35,15 +35,15 @@
function FileTestCase() {
$this->UnitTestCase('File test');
}<strong>
-
+
function setUp() {
@unlink('../temp/test.txt');
}
-
+
function tearDown() {
@unlink('../temp/test.txt');
}
-
+
function testCreation() {
$writer = &new FileWriter('../temp/test.txt');
$writer->write('Hello');
@@ -103,10 +103,12 @@
<tr><td><code>assertNotIdentical($x, $y)</code></td><td>Echoue si $x === $y est vrai</td></tr>
<tr><td><code>assertReference($x, $y)</code></td><td>Echoue sauf si $x et $y sont la m\xEAme variable</td></tr>
<tr><td><code>assertCopy($x, $y)</code></td><td>Echoue si $x et $y sont la m\xEAme variable</td></tr>
- <tr><td><code>assertWantedPattern($p, $x)</code></td><td>Echoue sauf si l'expression rationnelle $p capture $x</td></tr>
- <tr><td><code>assertNoUnwantedPattern($p, $x)</code></td><td>Echoue si l'expression rationnelle $p capture $x</td></tr>
- <tr><td><code>assertNoErrors()</code></td><td>Echoue si une erreur PHP arrive</td></tr>
- <tr><td><code>assertError($x)</code></td><td>Echoue si aucune erreur ou message incorrect de PHP n'arrive</td></tr>
+ <tr><td><code>assertPattern($p, $x)</code></td><td>Echoue sauf si l'expression rationnelle $p capture $x</td></tr>
+ <tr><td><code>assertNoPattern($p, $x)</code></td><td>Echoue si l'expression rationnelle $p capture $x</td></tr>
+ <tr><td><code>expectError($x)</code></td><td>Echoue si l'erreur correspondante n'arrive pas</td></tr>
+ <tr><td><code>expectException($x)</code></td><td>Echoue si l'exception correspondante n'est pas lev\xE9e</td></tr>
+ <tr><td><code>ignoreException($x)</code></td><td>Avale toutes les exceptions correspondantes qui surviendraient</td></tr>
+ <tr><td><code>assert($e)</code></td><td>Echoue sur un objet <a local="expectation_documentation">attente</a> $e qui \xE9chouerait</td></tr>
</tbody></table>
Toutes les m\xE9thodes d'assertion peuvent recevoir
une description optionnelle :
@@ -145,38 +147,35 @@
\xC9chouera \xE9tant donn\xE9 que la variable <code>$b</code>
est une copie de <code>$a</code>.
<php><![CDATA[
-<strong>$this->assertWantedPattern('/hello/i', 'Hello world');</strong>
+<strong>$this->assertPattern('/hello/i', 'Hello world');</strong>
]]></php>
L\xE0, \xE7a passe puisque la recherche est insensible
\xE0 la casse et que donc <code>hello</code>
est bien rep\xE9rable dans <code>Hello world</code>.
<php><![CDATA[
-<strong>trigger_error('Disaster');
+<strong>$this->expectError();</strong>
trigger_error('Catastrophe');
-$this->assertError();
-$this->assertError('Catastrophe');
-$this->assertNoErrors();</strong>
]]></php>
- Ici, il y a besoin d'une petite explication :
- toutes passent !
+ Ici la v\xE9rification attrape le message "Catastrophe"
+ sans v\xE9rifier le texte et passe.
+ Elle enl\xE8ve l'erreur de la queue au passage.
+<php><![CDATA[
+<strong>$this->expectError('Catastrophe');</strong>
+trigger_error('Catastrophe');
+]]></php>
+ La v\xE9rification d'erreur suivante teste non seulement
+ l'existance de l'erreur mais aussi le texte qui,
+ dans le cas pr\xE9sent, correspond et donc un nouveau succ\xE8s.
+ Si des erreurs non v\xE9rifi\xE9es sont laiss\xE9es pour compte
+ \xE0 la fin d'une m\xE9thode de test alors un exception sera lev\xE9
+ dans le test.
</p>
<p>
- Les erreurs PHP dans SimpleTest sont pi\xE9g\xE9es et
- plac\xE9es dans une queue. Ici la premi\xE8re v\xE9rification
- d'erreur attrape le message "Disaster"
- sans v\xE9rifier le texte et passe. R\xE9sultat :
- l'erreur est supprim\xE9e de la queue.
- La v\xE9rification suivante teste non seulement l'existence
- de l'erreur mais aussi le texte qui correspond :
- un autre succ\xE8s. D\xE9sormais la queue est vide
- et le dernier test passe aussi.
- Si une autre erreur non v\xE9rifi\xE9e est encore
- dans la queue \xE0 la fin de notre m\xE9thode de test
- alors une exception sera rapport\xE9e dans le test.
- Notez que SimpleTest ne peut pas attraper les erreurs PHP \xE0 la compilation.
+ Notez que SimpleTest ne peut pas attraper des erreurs PHP
+ au moment de la compilation.
</p>
<p>
- Les sc\xE9narios de test peuvent utiliser des m\xE9thodes
+ Les sc\xE9narios de tests peuvent utiliser des m\xE9thodes
bien pratiques pour d\xE9boguer le code ou pour \xE9tendre la suite...
<table><tbody>
<tr><td><code>setUp()</code></td><td>Est lanc\xE9e avant chaque m\xE9thode de test</td></tr>
@@ -184,10 +183,8 @@
<tr><td><code>pass()</code></td><td>Envoie un succ\xE8s</td></tr>
<tr><td><code>fail()</code></td><td>Envoie un \xE9chec</td></tr>
<tr><td><code>error()</code></td><td>Envoi un \xE9v\xE8nement exception</td></tr>
- <tr><td><code>sendMessage()</code></td><td>Envoie un message d'\xE9tat aux syst\xE8mes d'affichage qui le supporte</td></tr>
<tr><td><code>signal($type, $payload)</code></td><td>Envoie un message d\xE9fini par l'utilisateur au rapporteur du test</td></tr>
<tr><td><code>dump($var)</code></td><td>Effectue un <code>print_r()</code> format\xE9 pour du d\xE9boguage rapide et grossier</td></tr>
- <tr><td><code>swallowErrors()</code></td><td>Vide les erreurs de la queue</td></tr>
</tbody></table>
</p>
</section>
@@ -203,7 +200,7 @@
function FileTester($name = false) {
$this->UnitTestCase($name);
}
-
+
function assertFileExists($filename, $message = '%s') {
$this->assertTrue(
file_exists($filename),
@@ -224,15 +221,15 @@
comme un sc\xE9nario de test classique...
<php><![CDATA[
class FileTestCase extends <strong>FileTester</strong> {
-
+
function setUp() {
@unlink('../temp/test.txt');
}
-
+
function tearDown() {
@unlink('../temp/test.txt');
}
-
+
function testCreation() {
$writer = &new FileWriter('../temp/test.txt');
$writer->write('Hello');<strong>
@@ -320,7 +317,7 @@
documentation,
marcus baker,
perrick penet
- simple test,
+ simpletest,
documentation simpletest,
phpunit,
junit,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 20:59:08
|
Revision: 2031
http://simpletest.svn.sourceforge.net/simpletest/?rev=2031&view=rev
Author: pp11
Date: 2011-06-08 20:59:02 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch VIII
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/subclass_tutorial.xml
Modified: simpletest/trunk/docs/source/fr/subclass_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/fr/subclass_tutorial.xml 2011-06-08 20:56:44 UTC (rev 2030)
+++ simpletest/trunk/docs/source/fr/subclass_tutorial.xml 2011-06-08 20:59:02 UTC (rev 2031)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Sous classer un sc\xE9nario de test unitaire" here="Sous classer un sc\xE9nario de test unitaire">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1878" date="08/06/2011" maintainer="pp11" />
<long_title>Tutorial de test unitaire en PHP - Sous classer un sc\xE9nario de test</long_title>
<content>
<section name="temps" title="Une assertion insensible au chronom\xE8tre">
@@ -144,7 +144,7 @@
<p>
Vous vous souvenez de quand nous avons construit
le test de groupe <em>all_tests.php</em>
- en utilisant la m\xE9thode <code>addTestFile()</code>.
+ en utilisant la m\xE9thode <code>addFile()</code>.
Cette m\xE9thode recherche les classes de sc\xE9nario de test,
les instancie si elles sont nouvelles puis ex\xE9cute
tous nos tests. Ce qui s'est pass\xE9 ?
@@ -227,11 +227,11 @@
<external>
<link>
Section pr\xE9c\xE9dente :
- <a local="gain_control_tutorial">contr\xF4ler les variables de test</a>.
+ <a href="gain_control_tutorial.php">contr\xF4ler les variables de test</a>.
</link>
<link>
Section suivante :
- <a local="display_subclass_tutorial">changer l'affichage des tests</a>.
+ <a href="display_subclass_tutorial.php">changer l'affichage des tests</a>.
</link>
<link>
Vous aurez besoin du
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 20:56:50
|
Revision: 2030
http://simpletest.svn.sourceforge.net/simpletest/?rev=2030&view=rev
Author: pp11
Date: 2011-06-08 20:56:44 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch VII
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/simple_test.xml
Modified: simpletest/trunk/docs/source/fr/simple_test.xml
===================================================================
--- simpletest/trunk/docs/source/fr/simple_test.xml 2011-06-08 20:53:03 UTC (rev 2029)
+++ simpletest/trunk/docs/source/fr/simple_test.xml 2011-06-08 20:56:44 UTC (rev 2030)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Prise en main rapide de SimpleTest" here="Prise en main rapide de SimpleTest">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1876" date="08/06/2011" maintainer="pp11" />
<long_title>
Prise en main rapide de SimpleTest pour PHP -
Tests unitaire et objets fantaisie pour PHP
@@ -505,7 +505,7 @@
</internal>
<external>
<link>
- <a href="https://sourceforge.net/project/showfiles.php?group_id=76550&release_id=153280">T\xE9l\xE9charger PHP Simple Test</a>
+ <a href="https://sourceforge.net/project/showfiles.php?group_id=76550&release_id=153280">T\xE9l\xE9charger PHP SimpleTest</a>
depuis <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
</link>
<link>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 20:53:09
|
Revision: 2029
http://simpletest.svn.sourceforge.net/simpletest/?rev=2029&view=rev
Author: pp11
Date: 2011-06-08 20:53:03 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch VI
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/reporter_documentation.xml
Modified: simpletest/trunk/docs/source/fr/reporter_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/fr/reporter_documentation.xml 2011-06-08 20:51:17 UTC (rev 2028)
+++ simpletest/trunk/docs/source/fr/reporter_documentation.xml 2011-06-08 20:53:03 UTC (rev 2029)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur le rapporteur de test" here="Le rapporteur de test">
- <synchronisation lang="en" version="1771" date="20/04/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="2028" date="08/06/2011" maintainer="pp11" />
<long_title>Documentation SimpleTest : le rapporteur de test</long_title>
<content>
<introduction>
@@ -45,7 +45,7 @@
il y a la classe <code>HtmlReporter</code> avec la signature suivante...
<php><![CDATA[
class HtmlReporter extends SimpleReporter {
- public HtmlReporter($encoding) { ... }
+ public __construct($encoding) { ... }
public makeDry(boolean $is_dry) { ... }
public void paintHeader(string $test_name) { ... }
public void sendNoCacheHeaders() { ... }
@@ -99,7 +99,7 @@
est souvent d\xE9livr\xE9 par le groupe de tests du niveau
le plus haut et donc c'est de l\xE0 que le
<code>$test_name</code> arrive.
- Il peint les titres de la page, CSS, la balise "body", etc.
+ Il peint le titre de la page, CSS, la balise "body", etc.
Il ne renvoie rien du tout (<code>void</code>).
</li>
<li>
@@ -161,7 +161,7 @@
est la premi\xE8re m\xE9thode tr\xE8s commode pour les sous-classes.
Elle liste l'arborescence courante des tests
sous la forme d'une liste de noms de tests.
- Le premier test -- celui le plus proche du coeur --
+ Le premier test -- celui de premier niveau --
sera le premier dans la liste et la m\xE9thode de test
en cours sera la derni\xE8re.
</li>
@@ -190,12 +190,12 @@
</ul>
Une modification simple : demander \xE0 l'HtmlReporter d'afficher
aussi bien les succ\xE8s que les \xE9checs et les erreurs...
-<php><![CDATA[<strong>
-class ShowPasses extends HtmlReporter {
+<php><![CDATA[
+<strong>class ReporterShowingPasses extends HtmlReporter {
function paintPass($message) {
parent::paintPass($message);
- print "&<span class=\"pass\">Pass</span>: ";
+ print "<span class=\"pass\">Pass</span>: ";
$breadcrumb = $this->getTestList();
array_shift($breadcrumb);
print implode("->", $breadcrumb);
@@ -244,16 +244,14 @@
<p>
Un affichage sans rien, un canevas vierge
pour votre propre cr\xE9ation, serait...
-<php><![CDATA[<strong>
-require_once('simpletest/simple_test.php');</strong>
+<php><![CDATA[
+<strong>require_once('simpletest/simpletest.php');</strong>
class MyDisplay extends SimpleReporter {<strong>
</strong>
- function paintHeader($test_name) {
- }
+ function paintHeader($test_name) { }
- function paintFooter($test_name) {
- }
+ function paintFooter($test_name) { }
function paintStart($test_name, $size) {<strong>
parent::paintStart($test_name, $size);</strong>
@@ -270,27 +268,70 @@
function paintFail($message) {<strong>
parent::paintFail($message);</strong>
}
+
+ function paintError($message) {<strong>
+ parent::paintError($message);</strong>
+ }
+
+ function paintException($exception) {<strong>
+ parent::paintException($exception);</strong>
+ }
}
]]></php>
Aucune sortie ne viendrait de cette classe jusqu'\xE0 un ajout de votre part.
</p>
+ <p>
+ Sauf qu'il y a un probl\xE8me : en utilisant cette cette classe
+ de bas niveau, vous devez explicitement l'invoquer
+ dans les scripts de test.
+ La commande "autorun" ne sera pas capable
+ d'utiliser son contexte courant (qu'elle soit lanc\xE9e
+ dans un navigateur web ou via une ligne de commande)
+ pour s\xE9lectionner le rapporteur.
+ </p>
+ <p>
+ Vous invoquez explicitement la lanceur de tests comme suit...
+<php><![CDATA[
+<?php
+require_once('simpletest/autorun.php');
+
+$test = new TestSuite('File test');
+$test->addFile('tests/file_test.php');
+$test->run(<strong>new MyReporter()</strong>);
+?>
+]]></php>
+ ...ou peut-\xEAtre comme cela...
+<php><![CDATA[
+<?php
+require_once('simpletest/simpletest.php');
+require_once('my_reporter.php');
+
+class MyTest extends TestSuite {
+ function __construct() {
+ parent::__construct();
+ $this->addFile('tests/file_test.php');
+ }
+}
+
+$test = new MyTest();
+$test->run(<strong>new MyReporter()</strong>);
+?>
+]]></php>
+ Nous verrons plus comment l'int\xE9grer avec l'"autorun".
+ </p>
</section>
<section name="cli" title="Le rapporteur en ligne de commande">
<p>
SimpleTest est aussi livr\xE9 avec un rapporteur
en ligne de commande, minime lui aussi.
- L'interface imite celle de JUnit,
- sauf qu'elle envoie les messages d'erreur au fur
- et \xE0 mesure de leur arriv\xE9e.
- Pour utiliser le rapporteur en ligne de commande,
+ Pour utiliser le rapporteur en ligne de commande explicitement,
il suffit de l'intervertir avec celui de la version HTML...
<php><![CDATA[
<?php
-require_once('simpletest/unit_tester.php');
-require_once('simpletest/reporter.php');
+require_once('simpletest/autorun.php');
-$test = &new GroupTest('File test');
-$test->addTestFile('tests/file_test.php');
+$test = new TestSuite('File test');
+$test->addFile('tests/file_test.php');
$test->run(<strong>new TextReporter()</strong>);
?>
]]></php>
@@ -304,15 +345,15 @@
<pre class="shell">
File test
OK
-Test cases run: 1/1, Failures: 0, Exceptions: 0
+Test cases run: 1/1, Passes: 1, Failures: 0, Exceptions: 0
</pre>
Un \xE9chec d\xE9clenche un affichage comme...
<pre class="shell">
File test
1) True assertion failed.
- in createnewfile
+ in createNewFile
FAILURES!!!
-Test cases run: 1/1, Failures: 1, Exceptions: 0
+Test cases run: 1/1, Passes: 0, Failures: 1, Exceptions: 0
</pre>
</p>
<p>
@@ -328,34 +369,50 @@
avec la bonne valeur renvoy\xE9e...
<php><![CDATA[
<?php
-require_once('simpletest/unit_tester.php');
-require_once('simpletest/reporter.php');
+require_once('simpletest/autorun.php');
-$test = &new GroupTest('File test');
-$test->addTestFile('tests/file_test.php');<strong>
-exit ($test->run(new TextReporter()) ? 0 : 1);</strong>
+$test = new TestSuite('File test');
+$test->addFile('tests/file_test.php');
+<strong>exit ($test->run(new TextReporter()) ? 0 : 1);</strong>
?>
]]></php>
- Bien s\xFBr l'objectif n'est pas de cr\xE9er deux scripts de test,
+ Bien s\xFBr l'objectif ne serait pas de cr\xE9er deux scripts de test,
l'un en ligne de commande et l'autre pour un navigateur web,
pour chaque suite de test.
Le rapporteur en ligne de commande inclut
une m\xE9thode pour d\xE9terminer l'environnement d'ex\xE9cution...
<php><![CDATA[
<?php
-require_once('simpletest/unit_tester.php');
-require_once('simpletest/reporter.php');
+require_once('simpletest/autorun.php');
-$test = &new GroupTest('File test');
-$test->addTestFile('tests/file_test.php');<strong>
-if (TextReporter::inCli()) {</strong>
- exit ($test->run(new TextReporter()) ? 0 : 1);<strong>
-}</strong>
+$test = new TestSuite('File test');
+$test->addFile('tests/file_test.php');
+<strong>if (TextReporter::inCli()) {</strong>
+ exit ($test->run(new TextReporter()) ? 0 : 1);
+<strong>}</strong>
$test->run(new HtmlReporter());
?>
]]></php>
Il s'agit l\xE0 de la forme utilis\xE9e par SimpleTest lui-m\xEAme.
+ Quand vous utilisez l'"autorun.php"
+ et qu'aucun test n'a \xE9t\xE9 lanc\xE9 avant la fin,
+ c'est quasiment le code que SimpleTest lancera
+ pour vous implicitement.
</p>
+ <p>
+ En d'autres termes, ceci donne le m\xEAme r\xE9sultat...
+<php><![CDATA[
+<?php
+require_once('simpletest/autorun.php');
+
+class MyTest extends TestSuite {
+ function __construct() {
+ parent::__construct();
+ $this->addFile('tests/file_test.php');
+ }
+}
+?>
+]]></php> </p>
</section>
<section name="xml" title="Test distant">
<p>
@@ -384,16 +441,26 @@
</group>
</run>
]]></pre>
- Vous pouvez utiliser ce format avec le parseur
+ Pour faire en sorte ue vos sc\xE9narios de test produisent ce format,
+ dans la ligne de commande, ajoutez le flag <code>--xml</code>.
+<pre class="shell">
+php my_test.php --xml
+</pre>
+ Vous pouvez faire la m\xEAme chose dans le navigation web
+ en ajoutant le param\xE8tre <code>xml=1</code> dans l'URL.
+ N'importe quelle valeur "true" fera l'affaire.
+ </p>
+ <p>
+ Vous pouvez utiliser ce format avec le parseur
fourni dans SimpleTest lui-m\xEAme.
Il s'agit de <code>SimpleTestXmlParser</code>
et se trouve <em>xml.php</em> \xE0 l'int\xE9rieur du paquet SimpleTest...
<php><![CDATA[
<?php
require_once('simpletest/xml.php');
-
+
...
-$parser = &new SimpleTestXmlParser(new HtmlReporter());
+$parser = new SimpleTestXmlParser(new HtmlReporter());
$parser->parse($test_output);
?>
]]></php>
@@ -404,10 +471,32 @@
comme tout autre ex\xE9cution de test.
Il y a des occasions bizarres dans lesquelles c'est en fait tr\xE8s utile.
</p>
+ <p>
+ Le plus courant, c'est quand vous voulez isoler
+ un test sensible au crash.
+ Vous pouvez collecter la sortie XML en utilisant
+ l'op\xE9rateur antiquote (Ndt : backtick) \xE0 partir
+ d'un autre test.
+ De la sorte, il tourne dans son propre processus...
+<php><![CDATA[
+<?php
+require_once('simpletest/xml.php');
+
+if (TextReporter::inCli()) {
+ $parser = new SimpleTestXmlParser(new TextReporter());
+} else {
+ $parser = new SimpleTestXmlParser(new HtmlReporter());
+}
+$parser->parse(`php flakey_test.php --xml`);
+?>
+]]></php>
+ </p>
<p>
- Un probl\xE8me des tr\xE8s grandes suites de test,
- c'est qu'elles peuvent venir \xE0 bout de la limite de m\xE9moire
- par d\xE9faut d'un process PHP - 8Mb.
+ Un autre cas est celui des tr\xE8s longues suites de tests.
+ </p>
+ <p>
+ Elles peuvent venir \xE0 bout de la limite de m\xE9moire
+ par d\xE9faut d'un process PHP - 16Mb.
En pla\xE7ant la sortie des groupes de test dans du XML
et leur ex\xE9cution dans des process diff\xE9rents,
le r\xE9sultat peut \xEAtre pars\xE9 \xE0 nouveau pour agr\xE9ger
@@ -420,16 +509,19 @@
Un sc\xE9nario de test pour le r\xE9aliser existe d\xE9j\xE0
\xE0 l'int\xE9rieur du framework SimpleTest, mais il est encore exp\xE9rimental...
<php><![CDATA[
-<?php<strong>
-require_once('../remote.php');</strong>
-require_once('../reporter.php');
-
+<?php
+<strong>require_once('../remote.php');</strong>
+require_once('simpletest/autorun.php');
+
$test_url = ...;
$dry_url = ...;
-$test = &new GroupTest('Remote tests');
-$test->addTestCase(<strong>new RemoteTestCase($test_url, $dry_url)</strong>);
-$test->run(new HtmlReporter());
+class MyTestOnAnotherServer extends RemoteTestCase {
+ function __construct() {
+ $test_url = ...
+ parent::__construct($test_url, $test_url . ' --dry');
+ }
+}
?>
]]></php>
<code>RemoteTestCase</code> prend la localisation r\xE9elle
@@ -439,7 +531,7 @@
Cette technique est employ\xE9e pour que les progr\xE8s
soient correctement rapport\xE9s vers le haut.
<code>RemoteTestCase</code> peut \xEAtre ajout\xE9 \xE0
- une suite de test comme n'importe quel autre groupe de tests.
+ une suite de test comme n'importe quelle autre suite de tests.
</p>
</section>
</content>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 20:51:23
|
Revision: 2028
http://simpletest.svn.sourceforge.net/simpletest/?rev=2028&view=rev
Author: pp11
Date: 2011-06-08 20:51:17 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
Small typo fixes
Modified Paths:
--------------
simpletest/trunk/docs/source/en/reporter_documentation.xml
Modified: simpletest/trunk/docs/source/en/reporter_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/en/reporter_documentation.xml 2011-06-08 20:20:43 UTC (rev 2027)
+++ simpletest/trunk/docs/source/en/reporter_documentation.xml 2011-06-08 20:51:17 UTC (rev 2028)
@@ -276,7 +276,7 @@
The catch with using this low level class is that you must
explicitely invoke it in the test script.
The "autorun" facility will not be able to use
- it's runime context (whether it's running in a web browser
+ its runtime context (whether it's running in a web browser
or the command line) to select the reporter.
</p>
<p>
@@ -466,7 +466,7 @@
prone test.
You can collect the XML output using the backtick operator
from another test.
- In that way it runs in it's own process...
+ In that way it runs in its own process...
<php><![CDATA[
<?php
require_once('simpletest/xml.php');
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 20:20:49
|
Revision: 2027
http://simpletest.svn.sourceforge.net/simpletest/?rev=2027&view=rev
Author: pp11
Date: 2011-06-08 20:20:43 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch V
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/mock_objects_tutorial.xml
Modified: simpletest/trunk/docs/source/fr/mock_objects_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/fr/mock_objects_tutorial.xml 2011-06-08 20:05:28 UTC (rev 2026)
+++ simpletest/trunk/docs/source/fr/mock_objects_tutorial.xml 2011-06-08 20:20:43 UTC (rev 2027)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Objets fantaisie" here="Utiliser des objets fantaisie">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1979" date="08/06/2011" maintainer="pp11" />
<long_title>tutorial sur les tests unitaires en PHP - Utiliser les objets fantaisie en PHP</long_title>
<content>
<section name="remaniement" title="Remanier les tests \xE0 nouveau">
@@ -14,15 +14,9 @@
Appelons le <em>tests/time_test_case.php</em>...
<php><![CDATA[
<strong><?php
-if (! defined('SIMPLE_TEST')) {
- define('SIMPLE_TEST', 'simpletest/');
-}
-require_once(SIMPLE_TEST . 'unit_tester.php');
+require_once('simpletest/unit_tester.php');
-class TimeTestCase extends UnitTestCase {
- function TimeTestCase($test_name = '') {
- $this->UnitTestCase($test_name);
- }
+abstract class TimeTestCase extends UnitTestCase {
function assertSameTime($time1, $time2, $message = '') {
if (! $message) {
$message = "Time [$time1] should match time [$time2]";
@@ -47,30 +41,30 @@
c'est \xE0 dire rechercher une suite de chiffres.
<php><![CDATA[
<?php
+require_once('simpletest/autorun.php');<strong>
+require_once('time_test_case.php');</strong>
require_once('../classes/log.php');<strong>
require_once('../classes/clock.php');
-class TestOfLogging extends TimeTestCase {
- function TestOfLogging() {
- $this->TimeTestCase('Log class test');
- }</strong>
+class TestOfLogging extends TimeTestCase {</strong>
function setUp() {
@unlink('../temp/test.log');
}
+
function tearDown() {
@unlink('../temp/test.log');
}
+
function getFileLine($filename, $index) {
$messages = file($filename);
return $messages[$index];
}
- function testCreatingNewFile() {
- ...
- }
- function testAppendingToFile() {
- ...
- }<strong>
- function testTimestamps() {
+
+ function testCreatingNewFile() { ... }
+
+ function testAppendingToFile() { ... }
+ <strong>
+ function testTimestampIsEmittedInMessage() {
$log = new Log('../temp/test.log');
$log->message('Test line');
$this->assertTrue(
@@ -89,18 +83,18 @@
avant d'avoir \xE9crit le code.
<div class="demo">
<h1>All tests</h1>
- <span class="pass">Pass</span>: log_test.php->Log class test->testappendingtofile->Expecting [/Test line 1/] in [Test line 1]<br />
- <span class="pass">Pass</span>: log_test.php->Log class test->testappendingtofile->Expecting [/Test line 2/] in [Test line 2]<br />
- <span class="pass">Pass</span>: log_test.php->Log class test->testcreatingnewfile->Created before message<br />
- <span class="pass">Pass</span>: log_test.php->Log class test->testcreatingnewfile->File created<br />
- <span class="fail">Fail</span>: log_test.php->Log class test->testtimestamps->Found timestamp<br />
+ <span class="pass">Pass</span>: log_test.php->Log class test->testAppendingToFile->Expecting [/Test line 1/] in [Test line 1]<br />
+ <span class="pass">Pass</span>: log_test.php->Log class test->testAppendingToFile->Expecting [/Test line 2/] in [Test line 2]<br />
+ <span class="pass">Pass</span>: log_test.php->Log class test->testCreatingNewFile->Created before message<br />
+ <span class="pass">Pass</span>: log_test.php->Log class test->testCreatingNewFile->File created<br />
+ <span class="fail">Fail</span>: log_test.php->Log class test->testTimestampIsEmittedInMessage->Found timestamp<br />
<br />
<b>Notice</b>: Undefined offset: 1 in <b>/home/marcus/projects/lastcraft/tutorial_tests/tests/log_test.php</b> on line <b>44</b><br />
- <span class="fail">Fail</span>: log_test.php->Log class test->testtimestamps->Correct time<br />
- <span class="pass">Pass</span>: clock_test.php->Clock class test->testclockadvance->Advancement<br />
- <span class="pass">Pass</span>: clock_test.php->Clock class test->testclocktellstime->Now is the right time<br />
+ <span class="fail">Fail</span>: log_test.php->Log class test->testTimestampIsEmittedInMessage->Correct time<br />
+ <span class="pass">Pass</span>: clock_test.php->Clock class test->testClockAdvance->Advancement<br />
+ <span class="pass">Pass</span>: clock_test.php->Clock class test->testClockTellsTime->Now is the right time<br />
<div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">3/3 test cases complete.
- <strong>6</strong> passes and <strong>2</strong> fails.</div>
+ <strong>6</strong> passes, <strong>2</strong> fails and <strong>2</strong> exceptions.</div>
</div>
Cette suite de tests montre encore les succ\xE8s
de notre modification pr\xE9c\xE9dente.
@@ -117,16 +111,16 @@
require_once('../classes/clock.php');</strong>
class Log {
- var $_file_path;
-
- function Log($file_path) {
- $this->_file_path = $file_path;
+ private $path;
+
+ function __construct($path) {
+ $this->path = $path;
}
-
- function message($message) {<strong>
- $clock = new Clock();</strong>
- $file = fopen($this->_file_path, 'a');<strong>
- fwrite($file, "[" . $clock->now() . "] $message\n");</strong>
+
+ function message($message) {
+ <strong>$clock = new Clock();</strong>
+ $file = fopen($this->path, 'a');
+ <strong>fwrite($file, "[" . $clock->now() . "] $message\n");</strong>
fclose($file);
}
}
@@ -147,6 +141,8 @@
Tester \xE0 la fois des facettes de l'horloge
et d'autres du log manque de coh\xE9sion,
ou de focalisation \xE9tanche si vous pr\xE9f\xE9rez.
+ </p>
+ <p>
Nos probl\xE8mes sont caus\xE9s en partie parce que
le r\xE9sultat de l'horloge est impr\xE9visible alors que
l'unique chose \xE0 tester est la pr\xE9sence
@@ -173,7 +169,7 @@
C'est plut\xF4t pas mal de travail pour un test plut\xF4t mineur.
</p>
<p>
- Sauf que \xE7a se fait sans aucun effort.
+ Sauf que \xE7a se fait presque sans effort.
</p>
</section>
<section name="fantaisie" title="Une horloge fantaisie">
@@ -193,11 +189,11 @@
C'est la ligne qui fait le travail.
Le g\xE9n\xE9rateur de code scanne la classe,
en extrait toutes ses m\xE9thodes, cr\xE9e le code
- pour g\xE9n\xE9rer une classe avec une interface identique,
+ pour g\xE9n\xE9rer une classe d'h\xE9ritage ou avec une interface identique,
mais en ajoutant le nom "Mock"
et ensuite <code>eval()</code> le nouveau code pour cr\xE9er la nouvelle classe.
<php><![CDATA[
-$clock = &new MockClock($this);
+$clock = new MockClock();
]]></php>
Cette ligne peut \xEAtre ajout\xE9e dans n'importe
quelle m\xE9thode de test qui nous int\xE9resserait.
@@ -205,46 +201,52 @@
</p>
<p>
Notre sc\xE9nario de test en est \xE0 ses premiers pas
- vers un nettoyage radical...
+ vers un nettoyage radical.
+ Le premier est d'utiliser effectivement
+ le <code>MockClock</code> dans notre test...
<php><![CDATA[
<?php
+require_once('simpletest/autorun.php');<strong>
+require_once('simpletest/mock_objects.php');</strong>
require_once('../classes/log.php');
require_once('../classes/clock.php');<strong>
-Mock::generate('Clock');
+Mock::generate('Clock');</strong>
-class TestOfLogging extends UnitTestCase {
- function TestOfLogging() {
- $this->UnitTestCase('Log class test');
- }</strong>
+class TestOfLogging extends <strong>UnitTestCase</strong> {
function setUp() {
@unlink('../temp/test.log');
}
+
function tearDown() {
@unlink('../temp/test.log');
}
+
function getFileLine($filename, $index) {
$messages = file($filename);
return $messages[$index];
}
- function testCreatingNewFile() {
- ...
- }
- function testAppendingToFile() {
- ...
- }
- function testTimestamps() {<strong>
- $clock = &new MockClock($this);
- $clock->setReturnValue('now', 'Timestamp');
+
+ function testCreatingNewFile() { ... }
+
+ function testAppendingToFile() { ... }
+
+ function testTimestamps() {
+ <strong>$clock = new MockClock();</strong>
+ <strong>$clock->returns('now', 'Timestamp');</strong>
$log = new Log('../temp/test.log');
- $log->message('Test line', &$clock);
- $this->assertWantedPattern(
- '/Timestamp/',
- $this->getFileLine('../temp/test.log', 0),
- 'Found timestamp');</strong>
+ $log->message('Test line', $clock);
+ $this->assertPattern(
+ <strong>'/Timestamp/'</strong>,
+ $this->getFileLine('../temp/test.log', 0));
}
}
?>
]]></php>
+ Notez que nous n'avons plus besoin de notre <code>TimeTestCase</code>.
+ Il sera encore utile pour l'objet <code>Clock</code>, mais
+ nous n'en n'avons plus besoin pour le <code>Log</code>.
+ </p>
+ <p>
Cette m\xE9thode de test cr\xE9e un objet <code>MockClock</code>
puis d\xE9finit la valeur retourn\xE9 par la m\xE9thode
<code>now()</code> par la cha\xEEne "Timestamp".
@@ -260,17 +262,15 @@
optionnel \xE0 la classe de log pour rendre ce test possible...
<php><![CDATA[
class Log {
- var $_file_path;
-
- function Log($file_path) {
- $this->_file_path = $file_path;
+ private $path;
+
+ function Log($path) {
+ $this->path = $path;
}
-
+
function message($message, <strong>$clock = false</strong>) {<strong>
- if (!is_object($clock)) {
- $clock = new Clock();
- }</strong>
- $file = fopen($this->_file_path, 'a');
+ $clock = $clock? $clock : new Clock();</strong>
+ $file = fopen($this->path, 'a');
fwrite($file, "[" . $clock->now() . "] $message\n");
fclose($file);
}
@@ -299,7 +299,7 @@
ou d'une variation future, mais la plupart n'y sont que pour les tests.
</p>
<p>
- Pensez-y. Les usines qui fabriquent ces cartes imprim\xE9es
+ Les usines qui fabriquent ces cartes imprim\xE9es
par centaine de milliers gaspillent des mati\xE8res premi\xE8res
sur des pi\xE8ces qui n'ajoutent rien \xE0 la fonction finale.
Si les ing\xE9nieurs mat\xE9riel peuvent faire quelques sacrifices
@@ -307,9 +307,7 @@
Notre sacrifice ne gaspille pas de mat\xE9riel apr\xE8s tout.
</p>
<p>
- \xC7a vous g\xEAne encore ? En fait moi aussi, mais pas tellement ici.
- La priorit\xE9 num\xE9ro 1 reste du code qui marche,
- pas un prix pour minimalisme.
+ \xC7a vous g\xEAne encore ? En fait moi aussi.
Si \xE7a vous g\xEAne vraiment alors d\xE9placez la cr\xE9ation
de l'horloge dans une autre m\xE9thode m\xE8re prot\xE9g\xE9e.
Ensuite sous classez l'horloge pour le test
@@ -317,7 +315,10 @@
Vos tests sont bancals mais votre interface est intacte.
</p>
<p>
- Une nouvelle fois je vous laisse la d\xE9cision finale.
+ Je vous laisse la d\xE9cision finale, mais veuillez tenir compte
+ que nous verrons des techniques d'automatisation dans
+ la prochaine section afin de rendre ce sous-classage
+ plus facile.
</p>
</section>
</content>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 20:05:35
|
Revision: 2026
http://simpletest.svn.sourceforge.net/simpletest/?rev=2026&view=rev
Author: pp11
Date: 2011-06-08 20:05:28 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch IV
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/partial_mocks_documentation.xml
Modified: simpletest/trunk/docs/source/fr/partial_mocks_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/fr/partial_mocks_documentation.xml 2011-06-08 19:53:14 UTC (rev 2025)
+++ simpletest/trunk/docs/source/fr/partial_mocks_documentation.xml 2011-06-08 20:05:28 UTC (rev 2026)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur les objets fantaisie partiels" here="Les objets fantaisie partiels">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="2000" date="08/06/2011" maintainer="pp11" />
<long_title>Documentation SimpleTest : les objets fantaisie partiels</long_title>
<content>
<introduction>
@@ -40,8 +40,8 @@
class Telnet {
...
- function &connect($ip, $port, $username, $password) {
- $socket = &new Socket($ip, $port);
+ function connect($ip, $port, $username, $password) {
+ $socket = new Socket($ip, $port);
$socket->read( ... );
...
}
@@ -70,7 +70,7 @@
class Telnet {
...
- <strong>function &connect(&$socket, $username, $password) {
+ <strong>function connect($socket, $username, $password) {
$socket->read( ... );
...
}</strong>
@@ -83,9 +83,9 @@
class TelnetTest extends UnitTestCase {
...
function testConnection() {<strong>
- $socket = &new MockSocket($this);
+ $socket = new MockSocket();
...
- $telnet = &new Telnet();
+ $telnet = new Telnet();
$telnet->connect($socket, 'Me', 'Secret');
...</strong>
}
@@ -106,9 +106,9 @@
class Telnet {
...<strong>
- function &connect($ip, $port, $username, $password, $socket = false) {
- if (!$socket) {
- $socket = &new Socket($ip, $port);
+ function connect($ip, $port, $username, $password, $socket = false) {
+ if (! $socket) {
+ $socket = new Socket($ip, $port);
}
$socket->read( ... );</strong>
...
@@ -124,10 +124,10 @@
class TelnetTest extends UnitTestCase {
...
function testConnection() {<strong>
- $socket = &new MockSocket($this);
+ $socket = new MockSocket();
...
- $telnet = &new Telnet();
- $telnet->connect('127.0.0.1', 21, 'Me', 'Secret', &$socket);
+ $telnet = new Telnet();
+ $telnet->connect('127.0.0.1', 21, 'Me', 'Secret', $socket);
...</strong>
}
}
@@ -147,12 +147,12 @@
require_once('socket.php');
class Telnet {<strong>
- function Telnet(&$network) {
- $this->_network = &$network;
+ function Telnet($network) {
+ $this->_network = $network;
}</strong>
...
- function &connect($ip, $port, $username, $password) {<strong>
- $socket = &$this->_network->createSocket($ip, $port);
+ function connect($ip, $port, $username, $password) {<strong>
+ $socket = $this->_network->createSocket($ip, $port);
$socket->read( ... );</strong>
...
return $socket;
@@ -169,13 +169,12 @@
class TelnetTest extends UnitTestCase {
...
function testConnection() {<strong>
- $socket = &new MockSocket($this);
+ $socket = new MockSocket();
...
- $network = &new MockNetwork($this);
- $network->setReturnReference('createSocket', $socket);
- $telnet = &new Telnet($network);
- $telnet->connect('127.0.0.1', 21, 'Me', 'Secret');
- ...</strong>
+ $network = new MockNetwork();
+ $network->returnsByReference('createSocket', $socket);
+ $telnet = new Telnet($network);
+ $telnet->connect('127.0.0.1', 21, 'Me', 'Secret');</strong>
}
}
]]></php>
@@ -184,6 +183,15 @@
de fabriques ce qui rend notre code un peu moins intuitif.
La solution la plus flexible, mais aussi la plus complexe.
</p>
+ <p>
+ Des techniques comme "l'Injection de D\xE9pendance"
+ (ou "Dependency Injection") s'attelle au probl\xE8me
+ de l'instanciation d'une classe avec beaucoup de param\xE8tres.
+ Malheureusement la connaissance de ce patron de conception
+ n'est pas tr\xE8s r\xE9pandue et si vous \xEAtes en train d'essayer
+ de faire fonctionner du vieux code, r\xE9-achitecturer toute
+ l'application n'est pas vraiment une option.
+ </p>
<p>
Peut-on trouver un juste milieu ?
</p>
@@ -200,18 +208,20 @@
class Telnet {
...
- function &connect($ip, $port, $username, $password) {<strong>
- $socket = &$this->_createSocket($ip, $port);</strong>
+ function connect($ip, $port, $username, $password) {
+ <strong>$socket = $this->createSocket($ip, $port);</strong>
$socket->read( ... );
...
}<strong>
-
- function &_createSocket($ip, $port) {
+
+ protected function createSocket($ip, $port) {
return new Socket($ip, $port);
}</strong>
}
?>
]]></php>
+ Une premi\xE8re \xE9tape plut\xF4t pr\xE9cautionneuse m\xEAme pour
+ du code legacy et interm\xE9l\xE9.
Il s'agit l\xE0 de la seule modification dans le code de l'application.
</p>
<p>
@@ -219,15 +229,15 @@
une sous-classe de mani\xE8re \xE0 intercepter la cr\xE9ation de la socket...
<php><![CDATA[
<strong>class TelnetTestVersion extends Telnet {
- var $_mock;
-
- function TelnetTestVersion(&$mock) {
- $this->_mock = &$mock;
+ var $mock;
+
+ function TelnetTestVersion($mock) {
+ $this->mock = $mock;
$this->Telnet();
}
-
- function &_createSocket() {
- return $this->_mock;
+
+ protected function createSocket() {
+ return $this->mock;
}
}</strong>
]]></php>
@@ -238,7 +248,7 @@
C'est n\xE9cessaire dans le cas o\xF9 le constructeur appelle
<code>connect()</code>.
Autrement il pourrait donner un valeur nulle \xE0 partir de
- <code>_createSocket()</code>.
+ <code>createSocket()</code>.
</p>
<p>
Apr\xE8s la r\xE9alisation de tout ce travail suppl\xE9mentaire
@@ -248,11 +258,10 @@
class TelnetTest extends UnitTestCase {
...
function testConnection() {<strong>
- $socket = &new MockSocket($this);
+ $socket = new MockSocket();
...
- $telnet = &new TelnetTestVersion($socket);
- $telnet->connect('127.0.0.1', 21, 'Me', 'Secret');
- ...</strong>
+ $telnet = new TelnetTestVersion($socket);
+ $telnet->connect('127.0.0.1', 21, 'Me', 'Secret');</strong>
}
}
]]></php>
@@ -279,18 +288,17 @@
<strong>Mock::generatePartial(
'Telnet',
'TelnetTestVersion',
- array('_createSocket'));</strong>
+ array('createSocket'));</strong>
class TelnetTest extends UnitTestCase {
...
function testConnection() {<strong>
- $socket = &new MockSocket($this);
+ $socket = new MockSocket();
...
- $telnet = &new TelnetTestVersion($this);
- $telnet->setReturnReference('_createSocket', $socket);
+ $telnet = new TelnetTestVersion();
+ $telnet->setReturnReference('createSocket', $socket);
$telnet->Telnet();
- $telnet->connect('127.0.0.1', 21, 'Me', 'Secret');
- ...</strong>
+ $telnet->connect('127.0.0.1', 21, 'Me', 'Secret');</strong>
}
}
]]></php>
@@ -328,18 +336,21 @@
class TelnetTest extends UnitTestCase {
...
function testConnection() {
- $socket = &new MockSocket($this);
+ $socket = new MockSocket();
...
- $telnet = &new TelnetTestVersion($this);
- $telnet->setReturnReference('_createSocket', $socket);<strong>
- $telnet->expectOnce('_createSocket', array('127.0.0.1', 21));</strong>
+ $telnet = new TelnetTestVersion();
+ $telnet->setReturnReference('createSocket', $socket);
+ <strong>$telnet->expectOnce('createSocket', array('127.0.0.1', 21));</strong>
$telnet->Telnet();
$telnet->connect('127.0.0.1', 21, 'Me', 'Secret');
- ...<strong>
- $telnet->tally();</strong>
}
}
]]></php>
+ Les objets fantaisie partiels ne sont pas tr\xE8s utilis\xE9s.
+ Je les consid\xE8re comme transitoire.
+ Utile lors d'un remaniement, mais une fois que l'application
+ a eu toutes ses d\xE9pendances bien s\xE9par\xE9es alors
+ ils peuvent dispara\xEEtre.
</p>
</section>
<section name="moins" title="Tester moins qu'une classe">
@@ -355,16 +366,16 @@
</p>
<p>
Cette situation est assez hypoth\xE9tique, \xE9tant donn\xE9
- que je ne l'ai jamais essay\xE9e. Je suis ouvert \xE0 cette possibilit\xE9,
- mais je crains qu'en for\xE7ant la granularit\xE9 d'un objet
+ que je ne l'ai pas souvent essay\xE9e.
+ Je crains qu'en for\xE7ant la granularit\xE9 d'un objet
on n'obtienne pas forc\xE9ment un code de meilleur qualit\xE9.
Personnellement j'utilise les objets fantaisie partiels
comme moyen de passer outre la cr\xE9ation ou alors
de temps en temps pour tester le mod\xE8le de conception TemplateMethod.
</p>
<p>
- Pour choisir le m\xE9canisme \xE0 utiliser, on en revient
- toujours aux standards de code de votre projet.
+ On en revient toujours aux standards de code de votre projet :
+ c'est \xE0 vous de trancher si vous autorisez ce m\xE9canisme ou non.
</p>
</section>
</content>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 19:53:20
|
Revision: 2025
http://simpletest.svn.sourceforge.net/simpletest/?rev=2025&view=rev
Author: pp11
Date: 2011-06-08 19:53:14 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch III
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/improving_design_tutorial.xml
Modified: simpletest/trunk/docs/source/fr/improving_design_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/fr/improving_design_tutorial.xml 2011-06-08 19:50:19 UTC (rev 2024)
+++ simpletest/trunk/docs/source/fr/improving_design_tutorial.xml 2011-06-08 19:53:14 UTC (rev 2025)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Du haut vers le bas et pilot\xE9 par les tests" here="Du haut vers le bas et pilot\xE9 par les tests">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1873" date="08/06/2011" maintainer="pp11" />
<long_title>
tutoriel de test unitaire en PHP - Conception du haut vers le bas, tester d'abord avec des objets fantaisie
</long_title>
@@ -19,13 +19,23 @@
dans <em>classes/writer.php</em>...
<php><![CDATA[
<?php
-class <strong>Writer</strong> {
-
- function <strong>Writer()</strong> {
+require_once(dirname(__FILE__) . '/simpletest/autorun.php');
+require_once('../classes/log.php');
+require_once('../classes/clock.php');
+require_once('../classes/writer.php');
+Mock::generate('Clock');<strong>
+Mock::generate('Writer');</strong>
+
+class TestOfLogging extends UnitTestCase {
+
+ function testWriting() {
+ $clock = new MockClock();
+ $clock->returns('now', 'Timestamp');
+ $writer = new <strong>MockWriter()</strong>;
+ $writer->expectOnce('write', array('[Timestamp] Test line'));
+ $log = new Log($writer);
+ $log->message('Test line', $clock);
}
-
- function write($message) {
- }
}
?>
]]></php>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 19:50:26
|
Revision: 2024
http://simpletest.svn.sourceforge.net/simpletest/?rev=2024&view=rev
Author: pp11
Date: 2011-06-08 19:50:19 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch II
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/group_test_tutorial.xml
Modified: simpletest/trunk/docs/source/fr/group_test_tutorial.xml
===================================================================
--- simpletest/trunk/docs/source/fr/group_test_tutorial.xml 2011-06-08 19:31:06 UTC (rev 2023)
+++ simpletest/trunk/docs/source/fr/group_test_tutorial.xml 2011-06-08 19:50:19 UTC (rev 2024)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Grouper des tests" here="Grouper des tests">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="1954" date="08/06/2011" maintainer="pp11" />
<long_title>
Tutorial de test unitaire PHP - Grouper des tests unitaires et exemples d'\xE9criture de sc\xE9narios de tests
</long_title>
@@ -17,9 +17,7 @@
qu'ajouter une nouvelle m\xE9thode \xE0 un sc\xE9nario de test...
<php><![CDATA[
class TestOfLogging extends UnitTestCase {
- function TestOfLogging() {
- $this->UnitTestCase('Log class test');
- }
+
function testCreatingNewFile() {
@unlink('../temp/test.log');
$log = new Log('../temp/test.log');
@@ -27,21 +25,22 @@
$log->message('Should write this to a file');
$this->assertTrue(file_exists('../temp/test.log'), 'File created');<strong>
@unlink('../temp/test.log');</strong>
- }<strong>
- function testAppendingToFile() {
+ }
+ <strong>
+ function testSecondMessageIsAppended() {
@unlink('../temp/test.log');
$log = new Log('../temp/test.log');
$log->message('Test line 1');
$messages = file('../temp/test.log');
- $this->assertWantedPattern('/Test line 1/', $messages[0]);
+ $this->assertPattern('/Test line 1/', $messages[0]);
$log->message('Test line 2');
$messages = file('../temp/test.log');
- $this->assertWantedPattern('/Test line 2/', $messages[1]);
+ $this->assertPattern('/Test line 2/', $messages[1]);
@unlink('../temp/test.log');
}</strong>
}
]]></php>
- La m\xE9thode du sc\xE9nario de test <code>assertWantedPattern()</code>
+ La m\xE9thode du sc\xE9nario de test <code>assertPattern()</code>
utilise les expressions rationnelles Perl pour v\xE9rifier
qu'une cha\xEEne respecte un certain motif.
</p>
@@ -51,18 +50,19 @@
le tout deux fois de suite.
Nous souhaitons simplement v\xE9rifier que le loggueur
ajoute le texte \xE0 la fin plut\xF4t qu'\xE9craser
- les donn\xE9es d\xE9j\xE0 existantes. Quelque peu p\xE9dant,
- mais apr\xE8s tout il s'agit d'un tutorial !
+ les donn\xE9es d\xE9j\xE0 existantes.
</p>
<p>
De toute fa\xE7on ce test passe directement...
<div class="demo">
<h1>Log class test</h1>
<div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
- <strong>4</strong> passes and <strong>0</strong> fails.</div>
+ <strong>4</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>
</div>
Notre code contient actuellement beaucoup de r\xE9p\xE9titions,
nous devons effacer le fichier de test avant et apr\xE8s chaque test.
+ </p>
+ <p>
De m\xEAme que <a href="http://www.junit.org/">JUnit</a>,
SimpleTest utilise les m\xE9thodes
<code>setUp()</code> et <code>tearDown()</code>
@@ -74,30 +74,32 @@
Nos tests sont verts donc nous pouvons faire un peu de remaniement...
<php><![CDATA[
class TestOfLogging extends UnitTestCase {
- function TestOfLogging() {
- $this->UnitTestCase('Log class test');
- }<strong>
+<strong>
function setUp() {
@unlink('../temp/test.log');
}
+
function tearDown() {
@unlink('../temp/test.log');
}
- function testCreatingNewFile() {</strong>
+</strong>
+ function testCreatingNewFile() {
$log = new Log('../temp/test.log');
$this->assertFalse(file_exists('../temp/test.log'), 'Created before message');
$log->message('Should write this to a file');
- $this->assertTrue(file_exists('../temp/test.log'), 'File created');<strong>
+ $this->assertTrue(file_exists('../temp/test.log'), 'File created');
}
- function testAppendingToFile() {</strong>
+ <strong>
+ function testSecondMessageIsAppended() {
$log = new Log('../temp/test.log');
$log->message('Test line 1');
$messages = file('../temp/test.log');
- $this->assertWantedPattern('/Test line 1/', $messages[0]);
+ $this->assertPattern('/Test line 1/', $messages[0]);
$log->message('Test line 2');
$messages = file('../temp/test.log');
- $this->assertWantedPattern('/Test line 2/', $messages[1]);<strong>
- }</strong>
+ $this->assertPattern('/Test line 2/', $messages[1]);
+ }
+ </strong>
}
]]></php>
Le test reste vert. Nous pouvons continuer
@@ -108,31 +110,33 @@
Nous pouvons donc continuer le remaniement...
<php><![CDATA[
class TestOfLogging extends UnitTestCase {
- function TestOfLogging() {
- $this->UnitTestCase('Log class test');
- }
+
function setUp() {
@unlink('../temp/test.log');
}
+
function tearDown() {
@unlink('../temp/test.log');
- }<strong>
+ }
+ <strong>
function getFileLine($filename, $index) {
$messages = file($filename);
return $messages[$index];
- }</strong>
+ }
+ </strong>
function testCreatingNewFile() {
$log = new Log('../temp/test.log');
$this->assertFalse(file_exists('../temp/test.log'), 'Created before message');
$log->message('Should write this to a file');
$this->assertTrue(file_exists('../temp/test.log'), 'File created');
}
- function testAppendingToFile() {
+
+ function testSecondMessageIsAppended() {
$log = new Log('../temp/test.log');
$log->message('Test line 1');<strong>
- $this->assertWantedPattern('/Test line 1/', $this->getFileLine('../temp/test.log', 0));</strong>
+ $this->assertPattern('/Test line 1/', $this->getFileLine('../temp/test.log', 0));</strong>
$log->message('Test line 2');<strong>
- $this->assertWantedPattern('/Test line 2/', $this->getFileLine('../temp/test.log', 1));</strong>
+ $this->assertPattern('/Test line 2/', $this->getFileLine('../temp/test.log', 1));</strong>
}
}
]]></php>
@@ -142,7 +146,7 @@
mais la logique du test est plus claire.
</p>
</section>
- <section name="groupe" title="Un groupe de tests">
+ <section name="suite" title="Une suite de tests">
<p>
Un sc\xE9nario de test ne fonctionne pas tout seul
pendant tr\xE8s longtemps.
@@ -153,33 +157,19 @@
qui incluent l'ensemble des tests de l'application.
</p>
<p>
- Premi\xE8rement nous devons supprimer le code d'ex\xE9cution
- des tests se trouvant dans notre sc\xE9nario de test.
+ Premi\xE8rement nous devons cr\xE9er une suite de tests
+ dans le r\xE9pertoire <em>tests</em>...
<php><![CDATA[
-<?php<strong>
-require_once('../classes/log.php');
+<?php
+require_once(dirname(__FILE__) . '/simpletest/autorun.php');
+<strong>require_once('log_test.php');
-class TestOfLogging extends UnitTestCase {
- ...
-}</strong>
-?>
-]]></php>
- Nous n'avons plus besoin de la constante
- <code>SIMPLE_TEST</code>.
- Ensuite nous cr\xE9ons un groupe de tests appel\xE9
- <em>all_tests.php</em> dans le r\xE9pertoire <em>tests</em>...
-<php><![CDATA[
-<strong><?php
- if (! defined('SIMPLE_TEST')) {
- define('SIMPLE_TEST', 'simpletest/');
+class AllTests extends TestSuite {
+ function __construct() {
+ parent::__construct();
+ $this->addTest(new TestOfLogging());
}
- require_once(SIMPLE_TEST . 'unit_tester.php');
- require_once(SIMPLE_TEST . 'reporter.php');
- require_once('log_test.php');
-
- $test = &new GroupTest('All tests');
- $test->addTestCase(new TestOfLogging());
- $test->run(new HtmlReporter());
+}
?></strong>
]]></php>
Il n'y a presque de pas de diff\xE9rence tant que les choses marchent...
@@ -188,14 +178,8 @@
<div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
<strong>4</strong> passes and <strong>0</strong> fails.</div>
</div>
- Les tests du groupe s'ajoutent au compteur
- des sc\xE9narios de test. Ajouter des nouveaux sc\xE9narios
- de test est tr\xE8s simple.
- Il suffit d'inclure le fichier d'un sc\xE9nario
- et d'ajouter individuellement tous les sc\xE9narios autonomes.
- Vous pouvez aussi embo\xEEter les groupes de test
- les uns dans les autres (tout en faisant bien attention d'\xE9viter les boucles).
- </p>
+ Ajouter des tests est donc tr\xE8s facile.
+ </p>
<p>
Dans la <a href="gain_control_tutorial.php">page suivante</a>
nous les ajouterons encore plus rapidement.
@@ -207,7 +191,7 @@
<a href="#autre">Ajouter un autres test</a> au sc\xE9nario existant et remanier.
</link>
<link>
- La technique brute pour <a href="#groupe">grouper des tests unitaires</a>.
+ La technique brute pour <a href="#suite">cr\xE9er des suites de tests unitaires</a>.
</link>
</internal>
<external>
@@ -244,4 +228,3 @@
</keywords>
</meta>
</page>
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pp...@us...> - 2011-06-08 19:31:14
|
Revision: 2023
http://simpletest.svn.sourceforge.net/simpletest/?rev=2023&view=rev
Author: pp11
Date: 2011-06-08 19:31:06 +0000 (Wed, 08 Jun 2011)
Log Message:
-----------
French translation back in synch
Modified Paths:
--------------
simpletest/trunk/docs/source/fr/mock_objects_documentation.xml
Modified: simpletest/trunk/docs/source/fr/mock_objects_documentation.xml
===================================================================
--- simpletest/trunk/docs/source/fr/mock_objects_documentation.xml 2011-05-24 20:18:07 UTC (rev 2022)
+++ simpletest/trunk/docs/source/fr/mock_objects_documentation.xml 2011-06-08 19:31:06 UTC (rev 2023)
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- $Id$ -->
<page title="Documentation sur les objets fantaisie" here="Les objets fantaisie">
- <synchronisation lang="en" version="1687" date="24/03/2008" maintainer="pp11" />
+ <synchronisation lang="en" version="2008" date="08/06/2011" maintainer="pp11" />
<long_title>Documentation SimpleTest : les objets fantaise</long_title>
<content>
- <section name="quoi" title="Que sont les objets fantaisie ?">
+ <section name="what" title="Que sont les objets fantaisie ?">
<p>
Les objets fantaisie - ou "mock objects" en anglais -
ont deux r\xF4les pendant un sc\xE9nario de test : acteur et critique.
@@ -34,8 +34,21 @@
Si les objets fantaisie ne se comportaient que comme
des acteurs alors on les conna\xEEtrait sous le nom de
<a local="server_stubs_documentation">bouchons serveur</a>.
+ Il s'agissait originairement d'un patron de conception
+ identifi\xE9 par Robert Binder (<a href="">Testing
+ object-oriented systems</a>: models, patterns, and tools,
+ Addison-Wesley) en 1999.
</p>
<p>
+ Un bouchon serveur est une simulation d'un objet ou d'un composant.
+ Il doit remplacer exactement un composant dans un syst\xE8me
+ en vue d'effectuer des tests ou un prototypage,
+ tout en restant ultra-l\xE9ger.
+ Il permet aux tests de s'ex\xE9cuter plus rapidement, ou
+ si la classe simul\xE9e n'a pas encore \xE9t\xE9 \xE9crite,
+ de se lancer tout court.
+ </p>
+ <p>
Cependant non seulement les objets fantaisie jouent
un r\xF4le (en fournissant \xE0 la demande les valeurs requises)
mais en plus ils sont aussi sensibles aux messages qui
@@ -46,6 +59,8 @@
Si les attentes ne sont pas atteintes ils nous \xE9pargnent
l'effort de l'\xE9criture d'une assertion de test avec
\xE9chec en r\xE9alisant cette t\xE2che \xE0 notre place.
+ </p>
+ <p>
Dans le cas d'une connexion \xE0 une base de donn\xE9es
imaginaire ils peuvent tester si la requ\xEAte, disons SQL,
a bien \xE9t\xE9 form\xE9 par l'objet qui utilise cette connexion.
@@ -55,675 +70,817 @@
</section>
<section name="creation" title="Cr\xE9er des objets fantaisie">
<p>
- Comme pour la cr\xE9ation des bouchons serveur, tout ce dont
- nous avons besoin c'est d'un classe existante.
- La fameuse connexion \xE0 une base de donn\xE9es qui ressemblerait \xE0...
+ Tout ce dont nous avons besoin est une classe existante ou une interface,
+ par exemple une connexion \xE0 la base de donn\xE9es qui ressemblerait \xE0...
<php><![CDATA[
<strong>class DatabaseConnection {
- function DatabaseConnection() {
- }
-
- function query() {
- }
-
- function selectQuery() {
- }
+ function DatabaseConnection() { }
+ function query($sql) { }
+ function selectQuery($sql) { }
}</strong>
]]></php>
- Cette classe n'a pas encore besoin d'\xEAtre impl\xE9ment\xE9e.
Pour en cr\xE9er sa version fantaisie nous devons juste
- inclure la librairie d'objet fantaisie puis lancer le g\xE9n\xE9rateur...
+ lancer le g\xE9n\xE9rateur...
<php><![CDATA[
-<strong>require_once('simpletest/unit_tester.php');
-require_once('simpletest/mock_objects.php');
+require_once('simpletest/autorun.php');
require_once('database_connection.php');
-Mock::generate('DatabaseConnection');</strong>
+<strong>Mock::generate('DatabaseConnection');</strong>
]]></php>
- Ceci g\xE9n\xE8re une classe clone appel\xE9e <code>MockDatabaseConnection</code>.
+ Ce code g\xE9n\xE8re une classe clone appel\xE9e <code>MockDatabaseConnection</code>.
+ Cette nouvelle classe lui ressemble en tout point,
+ sauf qu'elle ne fait rien du tout.
+ </p>
+ <p>
+ Cette nouvelle classe est g\xE9n\xE9ratlement
+ une sous-classe de <code>DatabaseConnection</code>.
+ Malheureusement, il n'y as aucun moyen de cr\xE9er une version fantaisie
+ d'une classe avec une m\xE9thode <code>final</code> sans avoir
+ une version fonctionnelle de cette m\xE9thode.
+ Ce n'est pas pas tr\xE8s satisfaisant.
+ Si la cible est une interface ou si les m\xE9thodes <code>final</code>
+ existent dans la classe cible, alors une toute nouvelle classe
+ est cr\xE9\xE9e, elle impl\xE9mente juste les m\xEAme interfaces.
+ Si vous essayer de faire passer cette classe \xE0 travers un indice de type
+ qui sp\xE9cifie le v\xE9ritable nom de l'ancienne classe, alors il \xE9chouera.
+ Du code qui forcerait un indice de type tout en utilisant
+ des m\xE9thodes <code>final</code> ne pourrait probablement pas \xEAtre
+ test\xE9 efficacement avec des objets fantaisie.
+ </p>
+ <p>
+ Si vous voulez voir le code g\xE9n\xE9r\xE9, il suffit de faire un <code>print</code>
+ de la sortie de <code>Mock::generate()</code>.
+ VOici le code g\xE9n\xE9r\xE9 pour la classe <code>DatabaseConnection</code>
+ \xE0 la place de son interface...
+<php><![CDATA[
+class MockDatabaseConnection extends DatabaseConnection {
+ public $mock;
+ protected $mocked_methods = array('databaseconnection', 'query', 'selectquery');
+
+ function MockDatabaseConnection() {
+ $this->mock = new SimpleMock();
+ $this->mock->disableExpectationNameChecks();
+ }
+ ...
+ function DatabaseConnection() {
+ $args = func_get_args();
+ $result = &$this->mock->invoke("DatabaseConnection", $args);
+ return $result;
+ }
+ function query($sql) {
+ $args = func_get_args();
+ $result = &$this->mock->invoke("query", $args);
+ return $result;
+ }
+ function selectQuery($sql) {
+ $args = func_get_args();
+ $result = &$this->mock->invoke("selectQuery", $args);
+ return $result;
+ }
+}
+]]></php>
+ Votre sortie d\xE9pendra quelque peu de votre version pr\xE9cise de SimpleTest.
+ </p>
+ <p>
+ En plus des m\xE9thodes d'origine de la classe, vous en verrez d'autres
+ pour faciliter les tests.
+ Nous y reviendrons.
+ </p>
+ <p>
Nous pouvons d\xE9sormais cr\xE9er des instances de
cette nouvelle classe \xE0 l'int\xE9rieur m\xEAme de notre sc\xE9nario de test...
<php><![CDATA[
-require_once('simpletest/unit_tester.php');
-require_once('simpletest/mock_objects.php');
+require_once('simpletest/autorun.php');
require_once('database_connection.php');
Mock::generate('DatabaseConnection');
-<strong>
+
class MyTestCase extends UnitTestCase {
-
+
function testSomething() {
- $connection = &new MockDatabaseConnection($this);
+ <strong>$connection = new MockDatabaseConnection();</strong>
}
+}
+]]></php>
+ La version fantaisie contient toutles m\xE9thodes de l'originale.
+ En outre, tous les indices de type seront pr\xE9serv\xE9s.
+ Dison que nos m\xE9thodes de requ\xEAte attend un objet <code>Query</code>...
+<php><![CDATA[
+<strong>class DatabaseConnection {
+ function DatabaseConnection() { }
+ function query(Query $query) { }
+ function selectQuery(Query $query) { }
}</strong>
]]></php>
- Contrairement aux bouchons, le constructeur
- d'une classe fantaisie a besoin d'une r\xE9f\xE9rence au sc\xE9nario
- de test pour pouvoir transmettre les succ\xE8s
- et les \xE9checs pendant qu'il v\xE9rifie les attentes.
- Concr\xE8tement \xE7a veut dire que les objets fantaisie
- ne peuvent \xEAtre utilis\xE9s qu'au sein d'un sc\xE9nario de test.
- Malgr\xE9 tout, cette puissance suppl\xE9mentaire implique
- que les bouchons ne sont que rarement utilis\xE9s
- si des objets fantaisie sont disponibles.
+ Si nous lui passons le mauvais type d'objet
+ ou m\xEAme pire un non-objet...
+<php><![CDATA[
+class MyTestCase extends UnitTestCase {
+
+ function testSomething() {
+ $connection = new MockDatabaseConnection();
+ $connection->query('insert into accounts () values ()');
+ }
+}
+]]></php>
+ ...alors le code renverra une violation de typage,
+ exactement comme on aurait p\xFB s'y attendre
+ avec la classe d'origine.
</p>
+ <p>
+ Si la version fantaisie impl\xE9mente bien toutes les m\xE9thodes
+ de l'originale, elle renvoit aussi syst\xE9matiquement <code>null</code>.
+ Et comme toutes les m\xE9thodes qui renvoient toujours <code>null</code>
+ ne sont pas tr\xE8s utiles, nous avons besoin de leur faire dire
+ autre chose...
+ </p>
</section>
<section name="bouchon" title="Objets fantaisie en action">
<p>
- La version fantaisie d'une classe contient
- toutes les m\xE9thodes de l'originale.
- De la sorte une op\xE9ration comme
- <code><![CDATA[$connection->query()]]></code>
- est encore possible.
- Tout comme avec les bouchons, nous pouvons remplacer
- la valeur nulle renvoy\xE9e par d\xE9faut...
+ Changer le <code>null</code> renvoy\xE9 par la m\xE9thode fantaisie
+ en autre chose est assez facile...
<php><![CDATA[
-<strong>$connection->setReturnValue('query', 37);</strong>
+<strong>$connection->returns('query', 37)</strong>
]]></php>
- D\xE9sormais \xE0 chaque appel de
- <code><![CDATA[$connection->query()]]></code>
- nous recevons comme r\xE9sultat 37.
- Tout comme avec les bouchons nous pouvons utiliser
- des jokers et surcharger le param\xE8tre joker.
- Nous pouvons aussi ajouter des m\xE9thodes suppl\xE9mentaires
- \xE0 l'objet fantaisie lors de sa g\xE9n\xE9ration
- et lui choisir un nom de classe qui lui soit propre...
-<php><![CDATA[
-<strong>Mock::generate('DatabaseConnection', 'MyMockDatabaseConnection', array('setOptions'));</strong>
-]]></php>
- Ici l'objet fantaisie se comportera comme
- si <code>setOptions()</code> existait dans la classe originale.
- C'est pratique si une classe a utilis\xE9 le m\xE9canisme
- <code>overload()</code> de PHP pour ajouter des m\xE9thodes dynamiques.
- Vous pouvez cr\xE9er des fantaisies sp\xE9ciales pour simuler cette situation.
+ D\xE9sormais \xE0 chaque appel de <code><![CDATA[$connection->query()]]></code>
+ nous obtenons un r\xE9sultat de 37.
+ Il n'y a rien de particulier \xE0 cette valeur de 37.
+ Cette valeur de retour peut \xEAtre aussi compliqu\xE9 que n\xE9cessaire.
</p>
<p>
- Tous les mod\xE8les disponibles avec les bouchons serveur
- le sont \xE9galement avec les objets fantaisie...
+ Ici les param\xE8tres ne sont pas significatifs,
+ nous aurons syst\xE9matiquement la m\xEAme valeur en retour
+ une fois initialis\xE9s de la sorte.
+ Cela pourrait ne pas ressembler \xE0 une copie convaincante
+ de notre connexion \xE0 la base de donn\xE9es, mais pour
+ la demi-douzaine de lignes de code de notre m\xE9thode de test
+ c'est g\xE9n\xE9ralement largement assez.
+ </p>
+ <p>
+ Sauf que les choses ne sont pas toujours si simples.
+ Les it\xE9rateurs sont un probl\xE8me r\xE9current, si par exemple
+ renvoyer syst\xE9matiquement la m\xEAme valeur entraine
+ une boucle infinie dans l'objet test\xE9.
+ Pour ces cas-l\xE0, nous avons besoin d'une s\xE9quence de valeurs.
+ Supposons que nous avons un it\xE9rateur simple qui ressemble \xE0...
<php><![CDATA[
class Iterator {
- function Iterator() {
- }
-
- function next() {
- }
+ function Iterator() { }
+ function next() { }
}
]]></php>
- Une nouvelle fois, supposons que cet it\xE9rateur
- ne retourne que du texte jusqu'au moment o\xF9 il atteint
- son terme, quand il renvoie <code>false</code>.
- Nous pouvons le simuler avec...
+ Il s'agit l\xE0 de l'it\xE9rateur le plus basique que nous puissions imaginer.
+ Supponsons que cet it\xE9rateur ne renvoit que du texte
+ jusqu'\xE0 ce qu'il atteigne la fin et qu'il renvoie alors un false,
+ nous pouvons le simuler avec...
<php><![CDATA[
Mock::generate('Iterator');
class IteratorTest extends UnitTestCase() {
-
+
function testASequence() {<strong>
- $iterator = &new MockIterator($this);
- $iterator->setReturnValue('next', false);
- $iterator->setReturnValueAt(0, 'next', 'First string');
- $iterator->setReturnValueAt(1, 'next', 'Second string');</strong>
+ $iterator = new MockIterator();
+ $iterator->returns('next', false);
+ $iterator->returnsAt(0, 'next', 'First string');
+ $iterator->returnsAt(1, 'next', 'Second string');</strong>
...
}
}
]]></php>
- Au moment du premier appel \xE0 <code>next()</code>
- sur l'it\xE9rateur fantaisie il renverra tout d'abord
- "First string", puis ce sera au tour de
- "Second string" au deuxi\xE8me appel
- et ensuite pour tout appel suivant <code>false</code>
- sera renvoy\xE9.
- Ces valeurs renvoy\xE9es successivement sont prioritaires
- sur la valeur constante retourn\xE9e.
- Cette derni\xE8re est un genre de valeur par d\xE9faut si vous voulez.
+ Quand <code>next()</code> est appel\xE9 par le <code>MockIterator</code>
+ il commencera par renvoyer "First string",
+ au deuxi\xE8me passage "Second string" sera renvoy\xE9
+ et sur n'importe quel autre appel <code>false</code> sera renvoy\xE9
+ \xE0 son tour.
+ Les valeurs renvoy\xE9es les unes apr\xE8s les autres auront la priorit\xE9
+ sur la valeur constante.
+ Cette derni\xE8re est la valeur par d\xE9faut en quelque sorte.
</p>
<p>
- Reprenons aussi le conteneur d'information bouchonn\xE9
- avec des pairs clef / valeur...
+ Une autre situation d\xE9licate serait une op\xE9ration
+ <code>get()</code> surcharg\xE9e.
+ Un exemple serait un conteneur d'information avec des pairs clef/valeur.
+ Nous partons cette fois d'une classe de configuration telle...
<php><![CDATA[
class Configuration {
- function Configuration() {
- }
-
- function getValue($key) {
- }
+ function Configuration() { ... }
+ function get($key) { ... }
}
]]></php>
- Il s'agit l\xE0 d'une situation classique
- d'utilisation d'objets fantaisie \xE9tant donn\xE9
- que la configuration peut varier grandement de machine \xE0 machine :
- \xE7a contraint fortement la fiabilit\xE9 de nos tests
- si nous l'utilisons directement.
- Le probl\xE8me est que toutes les donn\xE9es nous parviennent
- \xE0 travers la m\xE9thode <code>getValue()</code>
- et que nous voulons des r\xE9sultats diff\xE9rents pour des clefs diff\xE9rentes.
- Heureusement les objets fantaisie ont un syst\xE8me de filtrage...
+ C'est une situation courante pour utiliser des objets fantaisie,
+ \xE9tant donn\xE9 que la v\xE9ritable configuration sera diff\xE9rente
+ d'une machine \xE0 l'autre et parfois m\xEAme d'un test \xE0 l'autre.
+ Cependant un probl\xE8me appara\xEEt quand toutes les donn\xE9es passent
+ par la m\xE9thode <code>get()</code> et que nous souhaitons
+ quand m\xEAme des r\xE9sultats diff\xE9rents pour des clefs diff\xE9rentes.
+ Par chance les objets fantaisie ont un syst\xE8me de filtre...
<php><![CDATA[
-<strong>$config = &new MockConfiguration($this);
-$config->setReturnValue('getValue', 'primary', array('db_host'));
-$config->setReturnValue('getValue', 'admin', array('db_user'));
-$config->setReturnValue('getValue', 'secret', array('db_password'));</strong>
+<strong>$config = &new MockConfiguration();
+$config->returns('get', 'primary', array('db_host'));
+$config->returns('get', 'admin', array('db_user'));
+$config->returns('get', 'secret', array('db_password'));</strong>
]]></php>
- Le param\xE8tre en plus est une liste d'arguments
- \xE0 faire correspondre. Dans ce cas nous essayons
- de faire correspondre un unique argument :
- en l'occurrence la clef recherch\xE9e.
- Maintenant que la m\xE9thode <code>getValue()</code>
- est invoqu\xE9e sur l'objet fantaisie...
+ Le dernier param\xE8tre est une liste d'arguements
+ pour v\xE9rifier une correspondance.
+ Dans ce cas, nous essayons de faire correspondre un argument
+ qui se trouve \xEAtre la clef de recherche.
+ D\xE9sormais quand l'objet fantaisie voit
+ sa m\xE9thode <code>get()</code> invoqu\xE9e...
<php><![CDATA[
-$config->getValue('db_user')
+$config->get('db_user')
]]></php>
- ...elle renverra "admin".
- Elle le trouve en essayant de faire correspondre
- les arguments entrants dans sa liste
- d'arguments sortants les uns apr\xE8s les autres
- jusqu'au moment o\xF9 une correspondance exacte est atteinte.
+ ...il renverra "admin".
+ Il trouve cette valeur en essayant de faire correspondre
+ l'argument re\xE7u \xE0 ceux de ses propres listes : d\xE8s qu'une
+ correspondance compl\xE8te est trouv\xE9, il s'arr\xEAte.
</p>
<p>
- Il y a des fois o\xF9 vous souhaitez
- qu'un objet sp\xE9cifique soit servi par la fantaisie
- plut\xF4t qu'une copie.
- De nouveau c'est identique au m\xE9canisme des bouchons serveur...
+ Vous pouvez pr\xE9ciser un argument par d\xE9faut via...
+<php><![CDATA[<strong>
+$config->returns('get', false, array('*'));</strong>
+]]></php>
+ Ce n'est pas la m\xEAme chose que de d\xE9finir la valeur renvoy\xE9e
+ sans aucun arguement...
+<php><![CDATA[<strong>
+$config->returns('get', false);</strong>
+]]></php>
+ Dans le premier cas, il acceptera n'importe quel argument,
+ mais il en faut au moins un.
+ Dans le deuxi\xE8me cas, n'importe quel nombre d'arguments
+ fera l'affaire and il agit comme un attrape-tout apr\xE8s
+ toutes les autres v\xE9rifications.
+ Notez que si - dans le premier cas - nous ajoutons
+ d'autres options avec param\xE8tre unique apr\xE8s le joker,
+ alors elle seront ignor\xE9s puisque le joker fera
+ la premi\xE8re correspondance.
+ Avec des listes complexes de param\xE8tres, l'ordre devient
+ important au risque de voir la correspondance souhait\xE9e
+ masqu\xE9 par un joker apparu plus t\xF4t.
+ D\xE9clarez les plus sp\xE9cifiques d'abord si vous n'\xEAtes pas s\xFBr.
+ </p>
+ <p>
+ Il y a des moments o\xF9 vous souhaitez qu'une r\xE9f\xE9rence
+ bien sp\xE9cifique soit servie par l'objet fantaisie plut\xF4t
+ qu'une copie.
+ C'est plut\xF4t rare pour dire le moins, mais vous pourriez
+ \xEAtre en train de simuler un conteneur qui d\xE9tiendrait
+ des primitives, tels des cha\xEEnes de caract\xE8res.
+ Par exemple.
<php><![CDATA[
-class Thing {
+class Pad {
+ function Pad() { }
+ function ¬e($index) { }
}
+]]></php>
+ Dans ce cas, vous pouvez d\xE9finir une r\xE9f\xE9rence dans la liste
+ des valeurs retourn\xE9es par l'objet fantaisie...
+<php><![CDATA[
+function testTaskReads() {
+ $note = 'Buy books';
+ $pad = new MockPad();
+ $vector-><strong>returnsByReference(</strong>'note', $note, array(3)<strong>)</strong>;
+ $task = new Task($pad);
+ ...
+}
+]]></php>
+ Avec cet assemblage vous savez qu'\xE0 chaque fois
+ que <code><![CDATA[$pad->note(3)]]></code> est appel\xE9
+ il renverra toujours la m\xEAme <code>$note</code>,
+ m\xEAme si celle-ci est modifi\xE9e.
+ </p>
+ <p>
+ Ces trois facteurs, timing, param\xE8tres et r\xE9f\xE9rences,
+ peuvent \xEAtre combin\xE9s orthogonalement.
+ Par exemple...
+<php><![CDATA[
+$buy_books = 'Buy books';
+$write_code = 'Write code';
+$pad = new MockPad();
+$vector-><strong>returnsByReferenceAt(0, 'note', $buy_books, array('*', 3));</strong>
+$vector-><strong>returnsByReferenceAt(1, 'note', $write_code, array('*', 3));</strong>
+]]></php>
+ Cela renverra une r\xE9f\xE9rence \xE0 <code>$buy_books</code> et
+ ensuite \xE0 <code>$write_code</code>, mais seuleent si deux param\xE8tres
+ sont utilis\xE9s, le deuxi\xE8me devant \xEAtre l'entier 3.
+ Cela devrait couvrir la plupart des situations.
+ </p>
+ <p>
+ Un dernier cas d\xE9licat reste : celui d'un objet cr\xE9ant
+ un autre objet, plus connu sous le patron de conception "fabrique"
+ (ou "factory").
+ Supponsons qu'\xE0 la r\xE9ussite d'une requ\xEAte \xE0
+ notre base de donn\xE9es imaginaire, un jeu d'enregistrements
+ est renvoy\xE9 sous la forme d'un it\xE9rateur, o\xF9 chaque appel
+ au <code>next()</code> sur notre it\xE9rateur donne une ligne
+ avant de s'arr\xEAtre avec un false.
+ Cela semble \xE0 un cauchemar \xE0 simuler, alors qu'en fait un objet
+ fantaisie peut \xEAtre cr\xE9\xE9 avec les m\xE9cansimes ci-dessus...
+<php><![CDATA[
+Mock::generate('DatabaseConnection');
+Mock::generate('ResultIterator');
-class Vector {
- function Vector() {
+class DatabaseTest extends UnitTestCase {
+
+ function testUserFinderReadsResultsFromDatabase() {<strong>
+ $result = new MockResultIterator();
+ $result->returns('next', false);
+ $result->returnsAt(0, 'next', array(1, 'tom'));
+ $result->returnsAt(1, 'next', array(3, 'dick'));
+ $result->returnsAt(2, 'next', array(6, 'harry'));
+
+ $connection = new MockDatabaseConnection();
+ $connection->returns('selectQuery', $result);</strong>
+
+ $finder = new UserFinder(<strong>$connection</strong>);
+ $this->assertIdentical(
+ $finder->findNames(),
+ array('tom', 'dick', 'harry'));
}
-
- function get($index) {
- }
}
]]></php>
- Dans ce cas vous pouvez placer une r\xE9f\xE9rence
- dans la liste renvoy\xE9e par l'objet fantaisie...
+ D\xE9sormais ce n'est que si notre <code>$connection</code>
+ est appel\xE9e par la m\xE9thode <code>query()</code>
+ que sera retourn\xE9 le <code>$result</code>,
+ lui-m\xEAme s'arr\xEAtant au troisi\xE8me appel
+ \xE0 <code>next()</code>.
+ Ce devrait \xEAtre suffisant comme information
+ pour que notre classe <code>UserFinder</code>,
+ la classe effectivement test\xE9e ici,
+ fasse son boulot.
+ Un test tr\xE8s pr\xE9cis et toujours pas
+ de base de donn\xE9es en vue.
+ </p>
+ <p>
+ Nous pourrsion affiner ce test encore plus
+ en insistant pour que la bonne requ\xEAte
+ soit envoy\xE9e...
<php><![CDATA[
-$thing = new Thing();<strong>
-$vector = &new MockVector($this);
-$vector->setReturnReference('get', $thing, array(12));</strong>
+$connection->returns('selectQuery', $result, array(<strong>'select name, id from people'</strong>));
]]></php>
- Avec cet arrangement vous savez qu'\xE0 chaque appel
- de <code><![CDATA[$vector->get(12)]]></code>
- le m\xEAme <code>$thing</code> sera renvoy\xE9.
+ L\xE0, c'est une mauvaise id\xE9e.
</p>
- </section>
- <section name="attentes" title="Objets fantaisie en critique">
<p>
- M\xEAme si les bouchons serveur vous isolent
- du d\xE9sordre du monde r\xE9el, il ne s'agit l\xE0 que
- de la moiti\xE9 du b\xE9n\xE9fice potentiel.
- Vous pouvez avoir une classe de test recevant
- les messages ad hoc, mais est-ce que votre nouvelle classe
- renvoie bien les bons ?
- Le tester peut devenir cafouillis sans une librairie d'objets fantaisie.
+ Niveau objet, nous avons un <code>UserFinder</code>
+ qui parle \xE0 une base de donn\xE9es \xE0 travers une interface g\xE9ante -
+ l'ensemble du SQL.
+ Imaginez si nous avions \xE9crit un grand nombre de tests
+ qui d\xE9pendrait d\xE9sormais de cette requ\xEAte SQL pr\xE9cise.
+ Ces requ\xEAtes pourraient changer en masse pour tout un tas
+ de raisons non li\xE9s \xE0 ce test sp\xE9cifique.
+ Par exemple, la r\xE8gle pour les quotes pourrait changer,
+ un nom de table pourrait \xE9voluer, une table de liaison pourrait
+ \xEAtre ajout\xE9, etc.
+ Cela entrainerait une r\xE9-\xE9criture de tous les tests \xE0 chaque fois
+ qu'un remaniement est fait, alors m\xEAme que le comportement lui
+ n'a pas boug\xE9.
+ Les tests sont cens\xE9s aider au remaniement, pas le bloquer.
+ Pour ma part, je pr\xE9f\xE8re avoir une suite de tests qui passent
+ quand je fais \xE9voluer le nom des tables.
</p>
<p>
- Pour l'exemple, prenons une classe <code>SessionPool</code>
- \xE0 laquelle nous allons ajouter une fonction de log.
- Plut\xF4t que de complexifier la classe originale,
- nous souhaitons ajouter ce comportement avec un d\xE9corateur (GOF).
- Pour l'instant le code de <code>SessionPool</code> ressemble \xE0...
+ Et si vous voulez une r\xE8gle, c'est toujours mieux de ne pas
+ cr\xE9er un objet fantaisie sur une grosse interface.
+ </p>
+ <p>
+ Par contrast, voici le test complet...
<php><![CDATA[
-<strong>class SessionPool {
- function SessionPool() {
- ...
- }
-
- function &findSession($cookie) {
- ...
- }
- ...
-}
+class DatabaseTest extends UnitTestCase {<strong>
+ function setUp() { ... }
+ function tearDown() { ... }</strong>
-class Session {
- ...
-}</strong>
-]]>
-</php>
- Alors que pour notre code de log, nous avons...
-<php><![CDATA[<strong>
-class Log {
- function Log() {
- ...
+ function testUserFinderReadsResultsFromDatabase() {
+ $finder = new UserFinder(<strong>new DatabaseConnection()</strong>);
+ $finder->add('tom');
+ $finder->add('dick');
+ $finder->add('harry');
+ $this->assertIdentical(
+ $finder->findNames(),
+ array('tom', 'dick', 'harry'));
}
-
- function message() {
- ...
- }
}
-
-class LoggingSessionPool {
- function LoggingSessionPool(&$session_pool, &$log) {
- ...
- }
-
- function &findSession($cookie) {
- ...
- }
- ...
-}</strong>
]]></php>
- Dans tout ceci, la seule classe \xE0 tester est
- <code>LoggingSessionPool</code>. En particulier,
- nous voulons v\xE9rifier que la m\xE9thode <code>findSession()</code>
- est appel\xE9e avec le bon identifiant de session au sein du cookie
- et qu'elle renvoie bien le message "Starting session $cookie"
- au loggueur.
+ Ce test est immunis\xE9 contre le changement de sch\xE9ma.
+ Il \xE9chouera uniquement si vous changez la fonctionnalit\xE9,
+ ce qui correspond bien \xE0 ce qu'un test doit faire.
</p>
<p>
- Bien que nous ne testions que quelques lignes
- de code de production, voici la liste des choses
- \xE0 faire dans un sc\xE9nario de test conventionnel :
- <ol>
- <li>Cr\xE9er un objet de log.</li>
- <li>Indiquer le r\xE9pertoire d'\xE9criture du fichier de log.</li>
- <li>Modifier les droits sur le r\xE9pertoire pour pouvoir y \xE9crire le fichier.</li>
- <li>Cr\xE9er un objet <code>SessionPool</code>.</li>
- <li>Lancer une session, ce qui demande probablement pas mal de choses.</li>
- <li>Invoquer <code>findSession()</code>.</li>
- <li>Lire le nouvel identifiant de session (en esp\xE9rant qu'il existe un accesseur !).</li>
- <li>Lever une assertion de test pour v\xE9rifier que cet identifiant correspond bien au cookie.</li>
- <li>Lire la derni\xE8re ligne du fichier de log.</li>
- <li>Supprimer avec une (ou plusieurs) expression rationnelle les timestamps de log en trop, etc.</li>
- <li>V\xE9rifier que le message de session est bien dans le texte.</li>
- </ol>
- Pas \xE9tonnant que les d\xE9veloppeurs d\xE9testent
- \xE9crire des tests quand ils sont aussi ingrats.
- Pour rendre les choses encore pire, \xE0 chaque fois que
- le format de log change ou bien que la m\xE9thode de cr\xE9ation
- des sessions change, nous devons r\xE9\xE9crire une partie
- des tests alors m\xEAme qu'ils ne testent pas ces parties
- du syst\xE8me. Nous sommes en train de pr\xE9parer
- le cauchemar pour les d\xE9veloppeurs de ces autres classes.
+ Il faut juste faire attention \xE0 ces m\xE9thodes <code>setUp()</code>
+ et <code>tearDown()</code> que nous avons survol\xE9 pour l'instant.
+ Elles doivent vider les tables de la base de donn\xE9es
+ et s'assurer que le sch\xE9ma est bien d\xE9fini.
+ Cela peut se engendrer un peu de travail suppl\xE9mentaire,
+ mais d'ordinaire ce type de code existe d\xE9j\xE0 - \xE0 commencer pour
+ le d\xE9ploiement.
</p>
<p>
- A la place, voici la m\xE9thode compl\xE8te pour le test
- avec un peu de magie via les objets fantaisie...
+ Il y a au moins un endroit o\xF9 vous aurez besoin d'objets fantaisie :
+ c'est la simulation des erreurs.
+ Exemple, la base de donn\xE9es tombe pendant que <code>UserFinder</code>
+ fait son travail. Le <code>UserFinder</code> se comporte-t-il bien ?
<php><![CDATA[
-Mock::generate('Session');
-Mock::generate('SessionPool');
-Mock::generate('Log');
+class DatabaseTest extends UnitTestCase {
-class LoggingSessionPoolTest extends UnitTestCase {
- ...
- function testFindSessionLogging() {<strong>
- $session = &new MockSession($this);
- $pool = &new MockSessionPool($this);
- $pool->setReturnReference('findSession', $session);
- $pool->expectOnce('findSession', array('abc'));
-
- $log = &new MockLog($this);
- $log->expectOnce('message', array('Starting session abc'));
-
- $logging_pool = &new LoggingSessionPool($pool, $log);
- $this->assertReference($logging_pool->findSession('abc'), $session);
- $pool->tally();
- $log->tally();</strong>
+ function testUserFinder() {
+ $connection = new MockDatabaseConnection();<strong>
+ $connection->throwOn('selectQuery', new TimedOut('Ouch!'));</strong>
+ $alert = new MockAlerts();<strong>
+ $alert->expectOnce('notify', 'Database is busy - please retry');</strong>
+ $finder = new UserFinder($connection, $alert);
+ $this->assertIdentical($finder->findNames(), array());
}
}
]]></php>
- Commen\xE7ons par \xE9crire une session simulacre.
- Pas la peine d'\xEAtre trop pointilleux avec
- celle-ci puisque la v\xE9rification de la session
- d\xE9sir\xE9e est effectu\xE9e ailleurs. Nous avons
- juste besoin de v\xE9rifier qu'il s'agit de
- la m\xEAme que celle qui vient du groupe commun des sessions.
+ Nous avons transmis au <code>UserFinder</code>
+ un objet <code>$alert</code>.
+ Il va transmettre un certain nombre de belles notifications
+ \xE0 l'interface utilisatuer en cas d'erreur.
+ Nous pr\xE9f\xE8rerions \xE9viter de saupoudrer notre code avec
+ des commandes <code>print</code> cod\xE9es en dur si nous pouvons
+ l'\xE9viter.
+ Emballer les moyens de sortie veut dire que nous pouvons utiliser
+ ce code partout. Et cela rend notre code plus facile.
</p>
<p>
- <code>findSession()</code> est un m\xE9thode fabrique
- dont la simulation est d\xE9crite <a href="#stub">plus haut</a>.
- Le point de d\xE9part vient avec le premier appel
- <code>expectOnce()</code>. Cette ligne indique
- qu'\xE0 chaque fois que <code>findSession()</code>
- est invoqu\xE9 sur l'objet fantaisie, il v\xE9rifiera
- les arguments entrant. S'il ne re\xE7oit
- que la cha\xEEne "abc" en tant qu'argument
- alors un succ\xE8s est envoy\xE9 au testeur unitaire,
- sinon c'est un \xE9chec qui est g\xE9n\xE9r\xE9.
- Il s'agit l\xE0 de la partie qui teste si nous avons bien
- la bonne session. La liste des arguments suit
- une format identique \xE0 celui qui pr\xE9cise les valeurs renvoy\xE9es.
- Vous pouvez avoir des jokers et des s\xE9quences
- et l'ordre de l'\xE9valuation restera le m\xEAme.
+ Pour faire passer ce test, le finder doit \xE9crire un message sympathique
+ et compr\xE9hensible \xE0 l'<code>$alert</code>, plut\xF4t que de propager
+ l'exception. Jusque l\xE0, tout va bien.
</p>
<p>
- Si l'appel n'est jamais effectu\xE9 alors n'est g\xE9n\xE9r\xE9
- ni le succ\xE8s, ni l'\xE9chec. Pour contourner cette limitation,
- nous devons dire \xE0 l'objet fantaisie que le test est termin\xE9 :
- il pourra alors d\xE9cider si les attentes ont \xE9t\xE9 r\xE9pondues.
- L'assertion du testeur unitaire de ceci est d\xE9clench\xE9e
- par l'appel <code>tally()</code> \xE0 la fin du test.
+ Comment faire en sorte que la <code>DatabaseConnection</code> fantaisie
+ soul\xE8ve une exception ?
+ Nous la g\xE9n\xE9rons avec la m\xE9thode <code>throwOn</code> sur l'objet fantaisie.
</p>
<p>
- Nous utilisons le m\xEAme mod\xE8le pour mettre sur pied
- le loggueur fantaisie. Nous lui indiquons que <code>message()</code>
- devrait \xEAtre invoqu\xE9 une fois et une fois seulement
- avec l'argument "Starting session abc".
- En testant les arguments d'appel, plut\xF4t que ceux de sortie du loggueur,
- nous isolons le test de tout modification dans le loggueur.
+ Enfin, que se passe-t-il si la m\xE9thode voulue pour la simulation
+ n'existe pas encore ?
+ Si vous d\xE9finissez une valeur de retour sur une m\xE9thode absente,
+ alors SimpleTest vous r\xE9pondra avec une erreur.
+ Et si vous utilisez <code>__call()</code> pour simuler
+ des m\xE9thodes dynamiques ?
</p>
<p>
- Nous commen\xE7ons le lancement nos tests \xE0 la cr\xE9ation
- du nouveau <code>LoggingSessionPool</code>
- et nous l'alimentons avec nos objets fantaisie juste cr\xE9\xE9s.
- D\xE9sormais tout est sous contr\xF4le. Au final nous confirmons
- que le <code>$session</code> donn\xE9 au d\xE9corateur est bien
- celui re\xE7u et prions les objets fantaisie de lancer leurs
- tests de comptage d'appel interne avec les appels <code>tally()</code>.
+ Les objets avec des interfaces dynamiques, avec <code>__call</code>,
+ peuvent \xEAtre probl\xE9matiques dans l'impl\xE9mentation courante
+ des objets fantaisie.
+ Vous pouvez en cr\xE9er un autour de la m\xE9thode <code>__call()</code>
+ mais c'est tr\xE8s laid.
+ Et pourquoi un test devrait conna\xEEtre quelque chose avec un niveau
+ si bas dans l'impl\xE9mentation. Il n'a besoin que de simuler l'appel.
</p>
<p>
- Il y a encore pas mal de code de test, mais ce code est tr\xE8s strict.
- S'il vous semble encore terrifiant il l'est bien moins
- que si nous avions essay\xE9 sans les objets fantaisie
- et ce test en particulier, interactions plut\xF4t que r\xE9sultat,
- est toujours plus difficile \xE0 mettre en place.
- Le plus souvent vous aurez besoin de tester des situations
- plus complexes sans ce niveau ni cette pr\xE9cision.
- En outre une partie peut \xEAtre remani\xE9e avec la m\xE9thode
- de sc\xE9nario de test <code>setUp()</code>.
+ Il y a bien moyen de contournement : ajouter des m\xE9thodes compl\xE9mentaires
+ \xE0 l'objet fantaisie \xE0 la g\xE9n\xE9ration.
+<php><![CDATA[
+<strong>Mock::generate('DatabaseConnection', 'MockDatabaseConnection', array('setOptions'));</strong>
+]]></php>
+ Dans une longue suite de tests cela pourrait entra\xEEner des probl\xE8mes,
+ puisque vous avez probablement d\xE9j\xE0 une version fantaisie
+ de la classe appell\xE9e <code>MockDatabaseConnection</code>
+ sans les m\xE9thodes compl\xE9mentaires.
+ Le g\xE9n\xE9rateur de code ne g\xE9n\xE9rera pas la version fantaisie de la classe
+ s'il en existe d\xE9j\xE0 une version avec le m\xEAme nom.
+ Il vous deviendra impossible de d\xE9terminer o\xF9 est pass\xE9e votre m\xE9thode
+ si une autre d\xE9finition a \xE9t\xE9 lanc\xE9 au pr\xE9alable.
</p>
<p>
- Voici la liste compl\xE8te des attentes que vous pouvez
- placer sur un objet fantaisie avec
- <a href="http://www.lastcraft.com/simple_test.php">SimpleTest</a>...
- <table><thead>
- <tr><th>Attente</th><th>N\xE9cessite <code>tally()</code></th></tr>
- </thead><tbody><tr>
- <td><code>expectArguments($method, $args)</code></td>
- <td style="text-align: center">Non</td>
- </tr>
- <tr>
- <td><code>expectArgumentsAt($timing, $method, $args)</code></td>
- <td style="text-align: center">Non</td>
- </tr>
- <tr>
- <td><code>expectCallCount($method, $count)</code></td>
- <td style="text-align: center">Oui</td>
- </tr>
- <tr>
- <td><code>expectMaximumCallCount($method, $count)</code></td>
- <td style="text-align: center">Non</td>
- </tr>
- <tr>
- <td><code>expectMinimumCallCount($method, $count)</code></td>
- <td style="text-align: center">Oui</td>
- </tr>
- <tr>
- <td><code>expectNever($method)</code></td>
- <td style="text-align: center">Non</td>
- </tr>
- <tr>
- <td><code>expectOnce($method, $args)</code></td>
- <td style="text-align: center">Oui</td>
- </tr>
- <tr>
- <td><code>expectAtLeastOnce($method, $args)</code></td>
- <td style="text-align: center">Oui</td>
- </tr>
- </tbody></table>
- O\xF9 les param\xE8tres sont...
- <dl>
- <dt class="new_code">$method</dt>
- <dd>Le nom de la m\xE9thode, sous la forme d'une cha\xEEne,
- \xE0 laquelle la condition doit \xEAtre appliqu\xE9e.</dd>
- <dt class="new_code">$args</dt>
- <dd>
- Les arguments sous la forme d'une liste.
- Les jokers peuvent \xEAtre inclus de la m\xEAme mani\xE8re
- qu'avec <code>setReturn()</code>.
- Cet argument est optionnel pour <code>expectOnce()</code>
- et <code>expectAtLeastOnce()</code>.
- </dd>
- <dt class="new_code">$timing</dt>
- <dd>
- Le seul point dans le temps pour tester
- la condition. Le premier appel commence \xE0 z\xE9ro.
- </dd>
- <dt class="new_code">$count</dt>
- <dd>Le nombre d'appels attendu.</dd>
- </dl>
- La m\xE9thode <code>expectMaximumCallCount()</code>
- est l\xE9g\xE8rement diff\xE9rente dans le sens o\xF9 elle ne pourra
- g\xE9n\xE9rer qu'un \xE9chec. Elle reste silencieuse
- si la limite n'est jamais atteinte.
+ Pour pallier \xE0 ce probl\xE8me, SimpleTest vous permet de choisir
+ n'importe autre nom pour la nouvelle classe au moment m\xEAme o\xF9
+ vous ajouter les m\xE9thodes compl\xE9mentaires.
+<php><![CDATA[
+Mock::generate('DatabaseConnection', <strong>'MockDatabaseConnectionWithOptions'</strong>, array('setOptions'));
+]]></php>
+ Ici l'objet fantaisie se comportera comme si
+ <code>setOptions()</code> existait bel et bien
+ dans la classe originale.
</p>
<p>
- Par ailleurs si vous avez just un appel dans votre test,
- v\xE9rifiez bien que vous utiliser
- <code>expectOnce</code>.<br />
- Utiliser <code>$mocked->expectAt(0, 'method', 'args);</code>
- tout seul ne sera pas pris en compte :
- la v\xE9rification des arguments et le comptage total
- sont pour l'instant encore ind\xE9pendant.
+ Les objets fantaisie ne peuvent \xEAtre utilis\xE9s qu'\xE0 l'int\xE9rieur
+ des sc\xE9narios de test, \xE9tant donn\xE9 qu'\xE0 l'apparition d'une attente
+ ils envoient des messages directement au sc\xE9nario de test courant.
+ Les cr\xE9er en dehors d'un sc\xE9nario de test entra\xEEnera une erreur
+ de run time quand une attente est d\xE9clench\xE9e et qu'il n'y a pas
+ de sc\xE9nario de test en cours pour recevoir le message.
+ Nous pouvons d\xE9sormais couvrir ces attentes.
</p>
- <p>
- Comme avec les assertions dans les sc\xE9narios de test,
- toutes ces attentes peuvent accepter une surcharge de
- message sous la forme d'un param\xE8tre suppl\xE9mentaire.
- Par ailleurs le message d'\xE9chec original peut \xEAtre inclus
- dans le r\xE9sultat avec "%s".
- </p>
</section>
- <section name="approches" title="D'autres approches">
+ <section name="expectations" title="Objets fantaisie en tant que critiques">
<p>
- Il existe trois approches pour cr\xE9er des objets
- fantaisie en comprenant celle utilis\xE9e par SimpleTest.
- Les coder \xE0 la main en utilisant une classe de base,
- les g\xE9n\xE9rer dans un fichier ou les g\xE9n\xE9rer dynamiquement \xE0 la vol\xE9e.
+ M\xEAme si les bouchons serveur isolent vos tests des perturbations
+ du monde r\xE9el, ils n'apportent que le moiti\xE9 des b\xE9n\xE9fices possibles.
+ Vous pouvez obtenir une classe de test qui re\xE7oive les bons messages,
+ mais cette nouvelle classe envoie-t-elle les bons ?
+ Le tester peut devenir tr\xE8s bord\xE9lique sans
+ une librairie d'objets fantaise.
</p>
- <p>
- Les objets fantaisie g\xE9n\xE9r\xE9s avec
- <a local="simple_test">SimpleTest</a> sont dynamiques.
- Ils sont cr\xE9\xE9s \xE0 l'ex\xE9cution dans la m\xE9moire,
- gr\xE2ce \xE0 <code>eval()</code>, plut\xF4t qu'\xE9crits dans un fichier.
- Cette op\xE9ration les rend facile \xE0 cr\xE9er,
- en une seule ligne, surtout par rapport \xE0 leur cr\xE9ation
- \xE0 la main dans une hi\xE9rarchie de classe parall\xE8le.
- Le probl\xE8me avec ce comportement tient g\xE9n\xE9ralement
- dans la mise en place des tests proprement dits.
- Si les objets originaux changent les versions fantaisie
- sur lesquels reposent les tests, une d\xE9synchronisation peut subvenir.
- Cela peut aussi arriver avec l'approche en hi\xE9rarchie parall\xE8le,
- mais c'est d\xE9tect\xE9 beaucoup plus vite.
+ <p>
+ Voici un exemple, prenons une classe <code>PageController</code>
+ toute simple qui traitera un formulaire de paiement
+ par carte bleue...
+<php><![CDATA[
+class PaymentForm extends PageController {
+ function __construct($alert, $payment_gateway) { ... }
+ function makePayment($request) { ... }
+}
+]]></php>
+ Cette classe a besoin d'un <code>PaymentGateway</code>
+ pour parler concr\xE8tement \xE0 la banque.
+ Il utilise aussi un objet <code>Alert</code>
+ pour g\xE9rer les erreurs.
+ Cette derni\xE8re classe parle \xE0 la page ou au template.
+ Elle est responsable de l'affichage du message d'erreur
+ et de la mise en valeur de tout champ du formulaire
+ qui serait incorrecte.
</p>
<p>
- Bien s\xFBr, la solution est d'ajouter de v\xE9ritables tests d'int\xE9gration.
- Vous n'en avez pas besoin de beaucoup
- et le c\xF4t\xE9 pratique des objets fantaisie fait plus
- que compenser la petite dose de test suppl\xE9mentaire.
- Vous ne pouvez pas avoir confiance dans du code qui
- ne serait test\xE9 que par des objets fantaisie.
+ Elle pourrait ressembler \xE0...
+<php><![CDATA[
+class Alert {
+ function warn($warning, $id) {
+ print '<div class="warning">' . $warning . '</div>';
+ print '<style type="text/css">#' . $id . ' { background-color: red }</style>';
+ }
+}
+]]></php>
</p>
<p>
- Si vous restez d\xE9termin\xE9 de construire des librairies
- statiques d'objets fantaisie parce que vous souhaitez
- \xE9muler un comportement tr\xE8s sp\xE9cifique,
- vous pouvez y parvenir gr\xE2ce au g\xE9n\xE9rateur de classe de SimpleTest.
- Dans votre fichier librairie, par exemple
- <em>mocks/connection.php</em> pour une connexion \xE0 une base de donn\xE9es,
- cr\xE9er un objet fantaisie et provoquer l'h\xE9ritage
- pour h\xE9riter pour surcharger des m\xE9thodes sp\xE9ciales
- ou ajouter des pr\xE9r\xE9glages...
+ Portons notre attention \xE0 la m\xE9thode <code>makePayment()</code>.
+ Si nous n'inscrivons pas un num\xE9ro "CVV2" (celui \xE0 trois
+ chiffre au dos de la carte bleue), nous souhaitons afficher
+ une erreur plut\xF4t que d'essayer de traiter le paiement.
+ En mode test...
<php><![CDATA[
<?php
- require_once('simpletest/mock_objects.php');
- require_once('../classes/connection.php');
-<strong>
- Mock::generate('Connection', 'BasicMockConnection');
- class MockConnection extends BasicMockConnection {
- function MockConnection(&$test, $wildcard = '*') {
- $this->BasicMockConnection($test, $wildcard);
- $this->setReturn('query', false);
- }
- }</strong>
+require_once('simpletest/autorun.php');
+require_once('payment_form.php');
+Mock::generate('Alert');
+Mock::generate('PaymentGateway');
+
+class PaymentFormFailuresShouldBeGraceful extends UnitTestCase {
+
+ function testMissingCvv2CausesAlert() {
+ $alert = new MockAlert();
+ <strong>$alert->expectOnce(
+ 'warn',
+ array('Missing three digit security code', 'cvv2'));</strong>
+ $controller = new PaymentForm(<strong>$alert</strong>, new MockPaymentGateway());
+ $controller->makePayment($this->requestWithMissingCvv2());
+ }
+
+ function requestWithMissingCvv2() { ... }
+}
?>
]]></php>
- L'appel <code>generate</code> dit au g\xE9n\xE9rateur de classe
- d'en cr\xE9er une appel\xE9e <code>BasicMockConnection</code>
- plut\xF4t que la plus courante <code>MockConnection</code>.
- Ensuite nous h\xE9ritons \xE0 partir de celle-ci pour obtenir
- notre version de <code>MockConnection</code>.
- En interceptant de cette mani\xE8re nous pouvons ajouter
- un comportement, ici transformer la valeur par d\xE9faut de
- <code>query()</code> en "false".
- En utilisant le nom par d\xE9faut nous garantissons
- que le g\xE9n\xE9rateur de classe fantaisie n'en recr\xE9era
- pas une autre diff\xE9rente si il est invoqu\xE9 ailleurs
- dans les tests. Il ne cr\xE9era jamais de classe
- si elle existe d\xE9j\xE0. Aussi longtemps que le fichier
- ci-dessus est inclus avant alors tous les tests qui
- g\xE9n\xE9raient <code>MockConnection</code> devraient
- utiliser notre version \xE0 pr\xE9sent. Par contre si
- nous avons une erreur dans l'ordre et que la librairie
- de fantaisie en cr\xE9e une d'abord alors la cr\xE9ation
- de la classe \xE9chouera tout simplement.
+ Premi\xE8re question : o\xF9 sont pass\xE9s les assertions ?
</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\xE9quents probl\xE8mes d'int\xE9gration
- plus tard dans les \xE9tapes de test.
+ L'appel \xE0 <code>expectOnce('warn', array(...))</code> annonce
+ \xE0 l'objet fantaisie qu'il faut s'attendre \xE0 un appel \xE0 <code>warn()</code>
+ avant la fin du test.
+ Quand il d\xE9bouche sur l'appel \xE0 <code>warn()</code>, il v\xE9rifie
+ les arguments. Si ceux-ci ne correspondent pas, alors un \xE9chec
+ est g\xE9n\xE9r\xE9. Il \xE9chouera aussi si la m\xE9thode n'est jamais appel\xE9e.
</p>
- </section>
- <section name="autres_testeurs" title="Je pense que SimpleTest pue !">
<p>
- Mais au moment d'\xE9crire ces lignes c'est le seul
- \xE0 g\xE9rer les objets fantaisie, donc vous \xEAtes bloqu\xE9 avec lui ?
+ Non seulement le test ci-dessus s'assure que <code>warn</code>
+ a bien \xE9t\xE9 appel\xE9, mais en plus qu'il a bien re\xE7u la cha\xEEne
+ de caract\xE8re "Missing three digit security code"
+ et m\xEAme le tag "cvv2".
+ L'\xE9quivalent de <code>assertIdentical()</code> est appliqu\xE9
+ aux deux champs quand les param\xE8tres sont compar\xE9s.
</p>
<p>
- Non, pas du tout.
- <a local="simple_test">SimpleTest</a> est une bo\xEEte \xE0 outils
- et parmi ceux-ci on trouve les objets fantaisie
- qui peuvent \xEAtre utilis\xE9s ind\xE9pendamment.
- Supposons que vous avez votre propre testeur unitaire favori
- et que tous vos tests actuels l'utilisent.
- Pr\xE9tendez que vous avez appel\xE9 votre tester unitaire PHPUnit
- (c'est ce que tout le monde a fait) et que la classe principale
- de test ressemble \xE0...
+ Si le contenu du message vous importe peu, surtout dans le cas
+ d'une interface utilisateur qui change r\xE9guli\xE8rement,
+ nous pouvons passer ce param\xE8tre avec l'op\xE9rateur "*"...
<php><![CDATA[
-class PHPUnit {
- function PHPUnit() {
+class PaymentFormFailuresShouldBeGraceful extends UnitTestCase {
+
+ function testMissingCvv2CausesAlert() {
+ $alert = new MockAlert();
+ $alert->expectOnce('warn', array(<strong>'*'</strong>, 'cvv2'));
+ $controller = new PaymentForm($alert, new MockPaymentGateway());
+ $controller->makePayment($this->requestWithMissingCvv2());
}
-
- function assertion($message, $assertion) {
- }
- ...
+
+ function requestWithMissingCvv2() { ... }
}
]]></php>
- La seule chose que la m\xE9thode <code>assertion()</code> r\xE9alise,
- c'est de pr\xE9parer une sortie embellie alors le param\xE8tre boolien
- de l'assertion sert \xE0 d\xE9terminer s'il s'agit d'une erreur ou d'un succ\xE8s.
- Supposons qu'elle est utilis\xE9e de la mani\xE8re suivante...
+ Nous pouvons m\xEAme rendre le test encore moins sp\xE9cifique
+ en supprimant compl\xE8tement la liste des param\xE8tres...
<php><![CDATA[
-$unit_test = new PHPUnit();
-$unit_test>assertion('I hope this file exists', file_exists('my_file'));
+function testMissingCvv2CausesAlert() {
+ $alert = new MockAlert();
+ <strong>$alert->expectOnce('warn');</strong>
+ $controller = new PaymentForm($alert, new MockPaymentGateway());
+ $controller->makePayment($this->requestWithMissingCvv2());
+}
]]></php>
- Comment utiliser les objets fantaisie avec ceci ?
+ Ceci v\xE9rifiera uniquement si la m\xE9thode a \xE9t\xE9 appel\xE9,
+ ce qui est peut-\xEAtre un peu drastique dans ce cas.
+ Plus tard, nous verrons comment all\xE9ger les attentes
+ plus pr\xE9cisement.
</p>
<p>
- Il y a une m\xE9thode prot\xE9g\xE9e sur la classe de base
- des objets fantaisie : elle s'appelle <code>_assertTrue()</code>.
- En surchargeant cette m\xE9thode nous pouvons utiliser
- notre propre format d'assertion.
- Nous commen\xE7ons avec une sous-classe, dans <em>my_mock.php</em>...
+ Des tests sans assertions peuvent \xEAtre \xE0 la fois compacts
+ et tr\xE8s expressifs. Parce que nous interceptons l'appel
+ sur le chemin de l'objet, ici de classe <code>Alert</code>,
+ nous \xE9vitons de tester l'\xE9tat par la suite.
+ Cela \xE9vite les assertions dans les tests, mais aussi
+ l'obligation d'ajouter des accesseurs uniquement
+ pour les tests dans le code original.
+ Si vous en arrivez \xE0 ajouter des accesseurs de ce type,
+ on parle alors de "state based testing" dans le jargon
+ ("test pilot\xE9 par l'\xE9tat"),
+ il est probablement plus que temps d'utiliser
+ des objets fantaisie dans vos tests.
+ On peut alors parler de "behaviour based testing"
+ (ou "test pilot\xE9 par le comportement") :
+ c'est largement mieux !
+ </p>
+ <p>
+ Ajoutons un autre test.
+ Assurons nous que nous essayons m\xEAme pas un paiement sans CVV2...
<php><![CDATA[
-<strong><?php
- require_once('simpletest/mock_objects.php');
-
- class MyMock extends SimpleMock() {
- function MyMock(&$test, $wildcard) {
- $this->SimpleMock($test, $wildcard);
- }
-
- function _assertTrue($assertion, $message) {
- $test = &$this->getTest();
- $test->assertion($message, $assertion);
- }
+class PaymentFormFailuresShouldBeGraceful extends UnitTestCase {
+
+ function testMissingCvv2CausesAlert() { ... }
+
+ function testNoPaymentAttemptedWithMissingCvv2() {
+ $payment_gateway = new MockPaymentGateway();
+ <strong>$payment_gateway->expectNever('pay');</strong>
+ $controller = new PaymentForm(new MockAlert(), $payment_gateway);
+ $controller->makePayment($this->requestWithMissingCvv2());
}
-?></strong>
+
+ ...
+}
]]></php>
- Maintenant une instance de <code>MyMock</code>
- cr\xE9era un objet qui parle le m\xEAme langage que votre testeur.
- Bien s\xFBr le truc c'est que nous cr\xE9ons jamais un...
[truncated message content] |
|
From: SourceForge.net <no...@so...> - 2011-06-06 07:31:06
|
Bugs item #3312248, was opened at 2011-06-06 09:31 Message generated for change (Tracker Item Submitted) made by jonathan74 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3312248&group_id=76550 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Documentation Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: jonathan (jonathan74) Assigned to: Nobody/Anonymous (nobody) Summary: Erreur de traduction (fr) - Sessions Initial Comment: Une erreur de traduction est prsente dans la documentation suivante : http://simpletest.org/fr/authentication_documentation.html Au dernier chapitre : Sessions de navigateur Il est crit dans la version franaise : La mthode WebTestCase::restart() prserve les cookies dont le timeout a expir, mais conserve les cookies temporaires ou expirs. Vous pouvez spcifier l'heure et la date de leur ractivation. Or dans la version anglaise, on trouve ceci : The WebTestCase::restart() method will preserve cookies that have unexpired timeouts, but throw away those that are temporary or expired. You can optionally specify the time and date that the restart happened. Je pense qu'il y a une erreur dans la version traduite (fr), je l'aurai plutt vu comme ceci : "La mthode WebTestCase::restart() prserve les cookies dont le timeout n'a pas expir, mais jette les cookies temporaires ou expirs." ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=547455&aid=3312248&group_id=76550 |