Продолжайте удивляться, насколько хорош Simple Test .
По причинам, объясненным здесь Джеффом, мы искали способы запуска набора тестов WACT таким образом, чтобы не ограничивать ограничение памяти PHP, и очевидным решением является выполнение тестов в небольших группах по сети, то есть Apache создаст новый ребенок для каждой группы, у каждого ребенка есть свежий кусок памяти, чтобы сожрать.
На первый взгляд это большая задача: сначала сгенерировать результаты теста в некоторой форме, которую легко проанализировать (например, XML), а затем иметь некоторый клиент, способный действовать как «браузер», для запуска и анализа результатов теста.
Оказывается, это не так сложно в конце концов; Простое тестирование впереди игры, упаковывая «репортер», который предоставляет результаты теста в формате XML и класс RemoteTestCase, подготовленный для подключения к URL-адресу и анализа выходных данных из XMLReporter.
Вот быстрый пример (я полагаю, вы прочитали отличную документацию );
/** * The class I've written that I want to test */ class Example { var $message = NULL; function setMessage($message) { $this->message = $mssage; // Whoops } function getMessage() { return $this->message; } } if ( !defined ('SIMPLE_TEST') ) { define ( 'SIMPLE_TEST','path/to/simpletest/' ); } // Include the main unit tester require_once SIMPLE_TEST . 'unit_tester.php'; // Include the XMLReporter require_once SIMPLE_TEST . 'xml.php'; /** * The test class */ class TestOfExample extends UnitTestCase { var $Example; function TestOfExample() { parent::UnitTestCase('Test Of Example'); } function setUp () { $this->Example = & new Example(); } function tearDown() { unset($this->Example); } function testEmptyMessage() { $this->assertNull($this->Example->getMessage()); } function testMessage() { $this->Example->setMessage('Hello World!'); $this->assertEqual($this->Example->getMessage(),'Hello World!'); } } // Create an instance of the test class $T = &new TestOfExample(); // Run it using the XMLReporter $T->run(new XMLReporter()); ?></code><p>The test output from running this looks like;</p> <code> < ?xml version="1.0"?> <run> <case> <name>Test Of Example</name> <test> <name>testemptymessage</name> <pass>[NULL] should be null at line 38</pass> </test> <test> <name>testmessage</name> <fail> Equal expectation fails as [NULL] does not match [String: Hello World!] at line 44 </fail> <exception> Unexpected PHP error [Undefined variable: mssage] severity [E_NOTICE] in [/home/hfuecks/public_html/test.php] line [6] </exception> </test> </case> </run>
Это уже большой шаг вперед в предоставлении результатов ваших тестов другим программам и средам, но Simple Test на этом не останавливается. Есть также класс RemoteTestCase, который занимается преобразованием вывода из XMLReporter обратно в обычный отчет HTML;
if ( !defined ('SIMPLE_TEST') ) { define ( 'SIMPLE_TEST','/path/to/simpletest/' ); } // Include the RemoteTestCase require_once SIMPLE_TEST . 'remote.php'; // Include the normal HTML reporter require_once SIMPLE_TEST . 'reporter.php'; $T = &new RemoteTestCase('http://localhost/~hfuecks/test.php'); $T->run(new HTMLReporter());
if ( !defined ('SIMPLE_TEST') ) { define ( 'SIMPLE_TEST','/path/to/simpletest/' ); } // Include the RemoteTestCase require_once SIMPLE_TEST . 'remote.php'; // Include the normal HTML reporter require_once SIMPLE_TEST . 'reporter.php'; $T = &new RemoteTestCase('http://localhost/~hfuecks/test.php'); $T->run(new HTMLReporter());
Если вы поддерживаете сайты для своих клиентов, это может быть очень полезно. Например, вы можете протестировать конфигурацию PHP для параметров, необходимых вашему приложению, и отследить проблемы, вызванные хостинг-провайдером вашего клиента (который только что обновил PHP), когда они происходят, используя тестовый пример, подобный;
if ( !defined ('SIMPLE_TEST') ) { define ( 'SIMPLE_TEST','/path/to/simpletest/' ); } // Include the main unit tester require_once SIMPLE_TEST . 'unit_tester.php'; // Include the XMLReporter require_once SIMPLE_TEST . 'xml.php'; /** * The test class */ class TestOfPHPConfiguration extends UnitTestCase { var $Example; function TestOfPHPConfiguration() { parent::UnitTestCase('Test Of PHP Configuration'); } // Test magic_quotes_gpc is off function testMagicQuotesGPC() { $this->assertEqual(ini_get('magic_quotes_gpc'),0); } } // Create an instance of the test class $T = &new TestOfPHPConfiguration(); // Run it using the XMLReporter $T->run(new XMLReporter());
if ( !defined ('SIMPLE_TEST') ) { define ( 'SIMPLE_TEST','/path/to/simpletest/' ); } // Include the main unit tester require_once SIMPLE_TEST . 'unit_tester.php'; // Include the XMLReporter require_once SIMPLE_TEST . 'xml.php'; /** * The test class */ class TestOfPHPConfiguration extends UnitTestCase { var $Example; function TestOfPHPConfiguration() { parent::UnitTestCase('Test Of PHP Configuration'); } // Test magic_quotes_gpc is off function testMagicQuotesGPC() { $this->assertEqual(ini_get('magic_quotes_gpc'),0); } } // Create an instance of the test class $T = &new TestOfPHPConfiguration(); // Run it using the XMLReporter $T->run(new XMLReporter());
Небольшая автоматизация cron (и, возможно, ваш собственный EMailReporter) позволят вашим тестам уведомлять вас о проблемах. Хороший способ предотвратить выпадение волос.