为什么我的自定义TestCase类没有被发现时,通过PhpUnit运行测试?



我按照文档中的描述将PHPUnit添加到我的Symfony项目中。创建并运行扩展SymfonyBundleFrameworkBundleTestWebTestCase的第一个测试没有问题。

现在我想创建一个自定义的WebTestCase子类,它提供了其他测试类的通用特性:

// .../projectDir/tests/BaseTestCase.php
namespace MyProjectTests;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class BaseTestCase extends WebTestCase {
protected function doSomething() {}
}

// .../projectDir/tests/SomeTest.php
namespace MyProjectTests;
use MyProjectTestsBaseTestCase;
class SomeTest extends BaseTestCase {
protected function testSomething() {
$this->doSomething();
...
}
}

当运行php bin/phpunit时,我得到一个"未找到类";错误:

$ php bin/phpunit
PHP Fatal error:  Uncaught Error: Class 'MyProjectTestsBaseTestCase' not found in /path/to/projectDir/tests/SomeTest.php:6
Stack trace:
#0 /path/to/projectDir/vendor/phpunit/phpunit/src/Util/FileLoader.php(65): include_once()
#1 /path/to/projectDir/vendor/phpunit/phpunit/src/Util/FileLoader.php(49): PHPUnitUtilFileLoader::load('/path/to/...')
#2 /path/to/projectDir/vendor/phpunit/phpunit/src/Framework/TestSuite.php(402): PHPUnitUtilFileLoader::checkAndLoad('/path/to/...')
#3 /path/to/projectDir/vendor/phpunit/phpunit/src/Framework/TestSuite.php(530): PHPUnitFrameworkTestSuite->addTestFile('/path/to/...')
#4 /path/to/projectDir/vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php(67): PHPUnitFrameworkTestSuite->addTestFiles(Array)
#5 /path/to/proje in /kunden/100170_47877/webpages/pockey/webpage/dev/vendor/phpunit/phpunit/src/TextUI/Command.php on line 98

我已经仔细检查了类名、名称空间和use语句(这应该不是必要的,因为两个类都在同一个文件夹/名称空间中)。

我是否需要在PHPUnit中注册BaseTestCase以某种方式成为我的测试的有效超类?

您似乎错过了测试目录的类路径声明。

一般来说,对于测试类本身,这是不需要的,因为PhpUnit将加载测试文件并直接读取类。但是在任何测试中引用的任何其他类都需要通过自动加载器。如果你没有声明在哪里找到Test命名空间,它会尝试在你的常规项目文件中找到它(例如在src/中)。

autoload-dev密钥添加到composer.json。例如,像这样:

{
"autoload": {
"psr-4": {
"My\Project\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"My\Project\Tests\": "tests/"
}
}
}

在此(composer dump-autload)之后转储autloader,并尝试再次运行测试。

相关内容

  • 没有找到相关文章

最新更新