使用phpt配置PHPUnit

时间:2013-05-08 18:31:26

标签: phpunit phpt

我完全被困了。起初我的代码是:

文件 sample000.phpt

--TEST--
Basic test
--DESCRIPTION--
Lowlevel basic test
--FILE--
<?php
echo 'Hello World!';
?>
--EXPECT--
Hello World!

文件 PhptTestCase.php

<?php
require_once 'PHPUnit/Extensions/PhptTestCase.php';

class PhptTestCase extends PHPUnit_Extensions_PhptTestCase
{
    public $result;

    public function __construct( $file ) {
        $options = array( 'include_path' => 'D:\\xampp\\php' );
        parent::__construct( $file, $options );
    }

}

文件 phptTest.php

<?php
class PhptTest extends PHPUnit_Framework_TestCase
{
    public $object;

    public function setUp() {}
    public function tearDown() {}

    public function testAll() {
        require_once 'phptTestCase.php';

        $file = __DIR__ . '/phpt-tests/sample000.phpt';

        $phpt = new PhptTestCase( $file );
        $result = $phpt->run();
        $this->assertTrue( $result->wasSuccessful() );

        var_dump( $result->failures() );

    }
}

从命令行运行pear run-tests sample000.phpt可以正常工作。运行phpunit PhptTest.php将始终失败。

经过一些研究后,我用var_dump( $result->failures() );转储了结果,看到找不到php可执行文件:

array(1) {
  [0] =>
  class PHPUnit_Framework_TestFailure#441 (2) {
    protected $failedTest =>
    class PhptTestCase#434 (3) {
      public $result =>
      NULL
      protected $filename =>
      string(84) "D:\\htdocs\\[...]\\phpt/phpt-tests/sample000.phpt"
      protected $options =>
      array(1) {
        ...
      }
    }
    protected $thrownException =>
    class PHPUnit_Framework_ComparisonFailure#440 (12) {
      protected $expected =>
      string(12) "Hello World!"
      protected $actual =>
      string(94) "Der Befehl "C:\\php\\php.exe" ist entweder falsch geschrieben oder\nkonnte nicht gefunden werden."
<-- snip -->
      protected $file =>
      string(53) "D:\\xampp\\php\\pear\\PHPUnit\\Extensions\\PhptTestCase.php"
      protected $line =>
      int(209)
      private $trace =>
      array(17) {
        ...
      }
      private $previous =>
      NULL
    }
  }
}

我认为这是使用PHPUnit运行时测试失败的原因:
Der Befehl“C:\ php \ php.exe”ist entweder falsch geschrieben oder \ nkonnte nicht gefunden werden。
翻译:“C:\ php \ php.exe”命令拼写错误或无法找到。我的php可执行文件安装在D:/xampp/php

我尝试在PHPUnit(phpunit.xml)的XML配置文件中设置包含路径,并尝试将包含路径作为选项传递给类PHPUnit_Extensions_PhptTestCase

有人能告诉我如何配置PHPUnit以便它可以找到php可执行文件吗?

2 个答案:

答案 0 :(得分:2)

PHPT支持捆绑在phpunit中。你能试试这个:

<强> phpunit.xml

<phpunit>
  <testsuites>
    <testsuite name="PHPT tests">
      <directory suffix=".phpt">phpt-tests</directory>
    </testsuite>
  </testsuites>
</phpunit>

创建目录phpt-tests并将sample000.phpt移动到它。

运行phpunit。它将从phpunit.xml加载配置并运行testsuite测试phpt-tests目录中的所有PHPT测试。

$ phpunit 
PHPUnit 3.7.8 by Sebastian Bergmann.

Configuration read from phpunit.xml    
.    
Time: 0 seconds, Memory: 3.25Mb    
OK (1 test, 1 assertion)

答案 1 :(得分:0)

在阅读了大量源文件并搜索网页后,我发现了找不到php可执行文件的原因。

PEAR使用一些环境变量来进行修补和其他一些事情。此变量存储在Windows注册表中。我的注册表搞砸了所以我不得不更新这些内容。

我下载了go-pear.phar(对于较旧的php版本使用go-pear.php)并运行它。这会创建一个文件PEAR_ENV.reg。将注册表项导入Windows注册表后,一切正常。