我刚刚通过Composer安装了Sebastian Bergmann的PHPUnit版本3.7.19,并编写了一个我想进行单元测试的类。
我想将所有类都自动加载到每个单元测试中, 而 不必使用它include或将其require放在测试的顶部,但这证明很困难!
include
require
这是我的目录结构的样子(后跟/斜杠表示目录,而不是文件):
我的 composer.json 文件包括以下内容:
"require": { "phpunit/phpunit": "3.7.*", "phpunit/phpunit-selenium": ">=1.2" }
我的 returning.php 类文件包括以下内容:
<?php class Returning { public $var; function __construct(){ $this->var = 1; } } ?>
我的 returningTest.php 测试文件包括以下内容:
<?php class ReturningTest extends PHPUnit_Framework_TestCase { protected $obj = null; protected function setUp() { $this->obj = new Returning; } public function testExample() { $this->assertEquals(1, $this->obj->var); } protected function tearDown() { } } ?>
但是,当我从命令行运行时./vendor/bin/phpunit tests,出现以下错误:
./vendor/bin/phpunit tests
PHP致命错误:在第8行的/files/code/php/db/tests/returningTest.php中找不到类“ Returning”
我注意到composer生成了一个autoload.php文件,vendor/autoload.php但不确定是否与我的问题有关。
composer
autoload.php
vendor/autoload.php
另外,在有关的其他一些答案中,人们提到了有关在composer中使用PSR-0和namespace在PHP中使用命令的一些知识,但是我都没有成功使用这两个方法。
namespace
请帮忙!我只想在PHPUnit中自动加载我的类,这样我就可以使用它们来创建对象而无需担心includeor require。
更新:2013年8月14日
现在,我已经创建了一个名为PHPUnit Skeleton的开源项目,以帮助您轻松地为项目启动并运行PHPUnit测试。
好吧,一开始。您需要告诉自动加载器在哪里可以找到类的php文件。这是通过遵循PSR-0标准来完成的。
最好的方法是使用名称空间。Acme/Tests/ReturningTest.php当您要求Acme\Tests\ReturningTest上课时,自动装带器将搜索文件。有一些很棒的名称空间教程,只是搜索和阅读。请注意,namespacing 并不是 PHP可以自动加载的东西,而是可以用于自动加载的东西。
Acme/Tests/ReturningTest.php
Acme\Tests\ReturningTest
Composer带有标准的PSR-0自动装带器(中的一个vendor/autoload.php)。对于您的情况,您想告诉自动装带器在lib目录中搜索文件。然后,当您使用ReturningTest它会寻找/lib/ReturningTest.php。
lib
ReturningTest
/lib/ReturningTest.php
将此添加到您的composer.json:
composer.json
{ ... "autoload": { "psr-0": { "": "lib/" } } }
文档中有更多信息。
现在,自动加载器可以找到您需要的类,让PHPunit知道在运行测试之前要执行的文件:引导文件。您可以使用该--bootstrap选项指定引导文件的位置:
--bootstrap
$ ./vendor/bin/phpunit tests --bootstrap vendor/autoload.php
但是,最好使用PHPunit配置文件:
<!-- /phpunit.xml.dist --> <?xml version="1.0" encoding="utf-8" ?> <phpunit bootstrap="./vendor/autoload.php"> <testsuites> <testsuite name="The project's test suite"> <directory>./tests</directory> </testsuite> </testsuites> </phpunit>
现在,您可以运行命令,它将自动检测配置文件:
$ ./vendor/bin/phpunit
如果将配置文件放入另一个目录,则需要在带有-c选项的命令中将该目录的路径放入。
-c