PHP SimpleTest — использование нескольких тестовых примеров

#php #unit-testing #simpletest

#php #модульное тестирование #simpletest

Вопрос:

Я пытался использовать SimpleTest, чтобы начать модульное тестирование моего кода, у меня есть рабочий тест, который работает сам по себе, но я хочу использовать один каталог, который будет содержать ряд тестов, и TestSuite выполнит все эти тесты, мой рабочий тест:

 <?php
require_once(dirname(__FILE__) . '/../simpletest/autorun.php');

define("ROOT",'/var/web/trunk/');
require_once('/usr/share/log4php/src/main/php/Logger.php');

class TestBayCrazy extends UnitTestCase { 

  function testDatabase () {
    require_once(ROOT.'includes/libs.inc.php');
    $database = new Database();
    $this->assertTrue($database->connected == TRUE);

    $database = new Database('a','b','c','d','e');
    $this->assertTrue($database->connected == FALSE);

    $database = null;
  }

}
  

Мой тестовый набор:

 <?php
require_once(dirname(__FILE__) . '/simpletest/autorun.php');

define("ROOT",'/var/web/trunk/');
require_once('/usr/share/log4php/src/main/php/Logger.php');


class AllTests extends TestSuite {
  function AllTests() {
    $this->TestSuite('All Tests');
    $this->addFile('tests/testDatabase.php');
    $this->addFile('tests/testSession.php');
    $this->addFile('tests/testValidate.php');
  }
}
  

Но это возвращает следующее при запуске:

 2011/10/05 12:37:47 [error] 3242#0: *309 FastCGI sent in stderr: "PHP Fatal error:
Call to a member function getDumper() on a non-object in 
/var/web/trunk/private/simpletest/test_case.php on line 316 PHP Stack trace: PHP   
1. simpletest_autorun() /var/web/trunk/private/simpletest/autorun.php:0 PHP   
2. run_local_tests() /var/web/trunk/private/simpletest/autorun.php:28 PHP   
3. TestSuite-run() /var/web/trunk/private/simpletest/autorun.php:52 PHP
4. TestSuite->run() /var/web/trunk/private/simpletest/test_case.php:563 PHP
5. TestSuite->run() /var/web/trunk/private/simpletest/test_case.php:563 PHP
6. TestSession->testSession() /var/web/trunk/private/simpletest/test_case.php:559 PHP
7. UnitTestCase->assertIsA() /var/web/trunk/private/tests/testSession.php:10 PHP
8. SimpleTestCase->assert() /var/web/trunk/private/simpletest/unit_tester.php:110"
while reading response header from upstream, client: 0.0.0.0, 
server: example.com, request: "GET /private/unittest.php HTTP/1.1", 
upstream: "fastcgi://127.0.0.1:9001", host: "0.0.0.0
  

Итак, что, черт возьми, я делаю не так? Я нашел только примеры того, как выполнить тестовый набор, а не то, как тест должен отличаться, когда он является членом набора, а не автономным (может быть, из-за моего незнания языка модульного тестирования).

Комментарии:

1. Мы перешли с SimpleTest на PHPUnit, потому что SimpleTest заброшен, а PHPUnit работает аналогично другим проектам xUnit. Я настоятельно рекомендую вам сделать то же самое, тем более, что вы только начинаете, и вам не нужно будет переписывать старые тесты. Мы переписали старые тесты, и это того стоило. Мы никогда не оглядывались назад…

2. Я согласен с Дэвидом, если у вас есть выбор, используйте PHPUnit. Я столкнулся с рядом проблем с макетными объектами SimpleTest.

3. Очень старый, но в конце концов я все-таки переключился на PHPUnit! В некотором смысле более крутая кривая обучения, но никто не может сказать, что она работает не так, как задумано! Ну, я надеюсь, что нет! 😉

Ответ №1:

На самом деле мы используем GroupTest вместо набора

 $dbgroup = new GroupTest("running database tests");
$dbgroup->addTestFile('tests/testDatabase.php');
$dbgroup->run(new HtmlReporter());
  

Он выполняет свою работу достаточно хорошо…

Комментарии:

1. Спасибо @case, в конце я отбросил SimpleTest, но я отмечаю ваш ответ как правильный, поскольку он имеет смысл, и я вам доверяю! 🙂