【发布时间】:2016-04-23 15:06:55
【问题描述】:
我正在尝试建立一个新的 php 项目。由于我是 phpunit 和 composer 的新手,所以我在项目设置上苦苦挣扎。
我的文件夹结构如下:
- TestProject
-- src
--- Controller
----- Foo.php
--- index.php
-- tests
--- Controller
----- FooTest.php
-- vendor
-- composer.json
-- phpunit.xml
我的作曲家文件:
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "4.7.*"
},
"autoload": {
"psr-4": {
"TestProject\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"TestProject\\Tests\\": "tests/"
}
}
我的 phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="TestProject Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
Foo.php
namespace TestProject\Controller;
class Foo
{
private $amount;
public function __construct($amount)
{
$this->amount = $amount;
}
public function getAmount()
{
return $this->amount;
}
}
FooTest.php
namespace TestProject\Tests\Controller;
class FooTest extends \PHPUnit_Framework_TestCase
{
public function testCanBeNegated()
{
// Arrange
$a = new Foo(1);
// Act
$b = $a->getAmount();
// Assert
$this->assertEquals(1, $b->getAmount());
}
}
但现在我不确定要让./vendor/bin/phpunit . 运行我缺少什么。目前它给了我一个错误:
PHP Fatal error: Uncaught PHPUnit_Framework_Exception: Class "PHPUnit_Extensions_RepeatedTest" does not extend PHPUnit_Framework_TestCase.
【问题讨论】:
-
您是否在项目中添加了 Composer 的
autoload.php?如果没有,require __DIR__ . '/vendor/autoload.php'; -
我将此
bootstrap="./tests/start.php"添加到phpunit.xml。它包含require_once __DIR__ . '/../vendor/autoload.php';。应该够了吧? -
Composer 的
autoload.php通常加载到项目的根目录(不在phpunit.xml中)。看看 Laravel、Drupal 和其他流行的 PHP 项目。 -
您是否在代码中的某处引用了
PHPUnit_Extensions_RepeatedTest?您可以使用-v选项运行phpunit以查看错误的堆栈跟踪。 -
我发现了错误,我在
TestProject文件夹中运行了命令./vendor/bin/phpunit .。所以 phpunit 运行了整个项目,而不仅仅是./src文件夹中的文件。
标签: php phpunit composer-php