我试图在PHP项目中使用PHPUnit。这是我的项目结构(文件是斜体字体风格)
-
控制器
- Pages.php
-
测试
- pagesTest.php
-
供应商
- 本
- phpunit.bat
- 本
-
composer.json
composer.json
{
"require-dev": {
"phpunit/phpunit":"5.5.4"
}
}
Pages.php
<?php
namespace controllers
class Pages
{
public function render()
{
return 'Hello World';
}
}
pagesTest.php
<?php
class PagesTest extends PHPUnit_Framework_TestCase
{
public function testRenderReturnsHelloWorld()
{
$pages = new 'controllers'Pages();
$expected = 'Hello Word';
$this->assertEquals($expected, $pages->render());
}
}
当我打开命令行时,我写:
C:'xampp'htdocs'PHPUnitTestProject'vendor'bin>phpunit ../../tests/PagesTest.php
我收到这个错误信息:PHP Fatal error: Class 'controllers'Pages' not found in C:'xampp'htdocs'PHPUnitTestProject'tests'pagesTest.php on line 7
这是一个路径问题。我认为这是因为它搜索了不存在的C:'xampp'htdocs'PHPUnitTestProject'vendor'bin'controllers'Pages()
。
应该是C:'xampp'htdocs'PHPUnitTestProject'controllers'Pages()
您需要指向被测试的类,因此在pagest .php中添加一个require:
require __DIR__ . "/../controllers/Pages.php";
或者如果您正在使用自动加载,那么您可以在命令行
中引导自动加载。phpunit --bootstrap src/autoload.php
或者您可以像下面这样设置PHPUnit .xml配置文件(来自我上面链接到的PHPUnit页面):
<phpunit bootstrap="src/autoload.php">
<testsuites>
<testsuite name="money">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
在phpunit.xml中添加bootstrap="vendor/autoload.php"
。dist为我解决了这个问题。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"> <!-- in here -->
<php>
<!-- ... -->
</php>
<testsuites>
<!-- ... -->
</testsuites>
</phpunit>
尝试composer dump-autoload -o
命令
从根文件夹调用phpunit
:
$ cd C:'xampp'htdocs'PHPUnitTestProject'
$ vendor'bin'phpunit tests/PagesTest.php
我得到了同样的错误,因为我没有将我的类命名为与phpunit调用的文件名相同。
。我在打电话:
phpunit TEST_myweb_controller.php
的类定义为:class web_controller_test extends PHPUnit'Framework'TestCase
返回错误:Class 'TEST_myweb_controller.php' could not be found in ''my'path'to'tests'TEST_myweb_controller.php'
class TEST_myweb_controller extends PHPUnit'Framework'TestCase