问题描述
我有一个symfony应用。我创建了一些可以在Controller中成功使用的自定义类,即在控制器中使用时可以成功自动加载的那些类。但是,当我尝试测试它们时,它们只是无法自动加载。
我检查过的内容
composer.json
中定义的测试./vendor/autoload.php
包含在测试本身中-仍然没有运气。手动包含在require_once
中-可以正常工作。由于自动加载在“开发”模式下可以正常工作,也就是说,当它不在单元测试中运行时,我想问题出在测试设置中:自动加载什么以及如何加载。我的环境
这是我在autoload
中的composer.json
部分:
"autoload": { "psr-4": { "App\\": "src/" } }, "autoload-dev": { "psr-4": { "App\\Tests\\": "tests/" } },
这是我的项目结构:
这里是OrdersTest.php
:
<?php
declare(strict_types=1);
namespace App\Tests\Controller\ViewOrders;
use App\Controller\ViewOrders\Orders;
use PHPUnit\Framework\TestCase;
class OrdersTest extends TestCase
{
public function testNoneOfTheOrdersCanBeAccepted()
{
new Orders();
}
}
这是Order
的命名空间:
namespace App\Controller\ViewOrders;
这是我的phpunit.xml.dist
:
<?xml version="1.0" encoding="UTF-8"?>
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.5/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="vendor/autoload.php"
>
<php>
<ini name="error_reporting" value="-1" />
</php>
<testsuites>
<testsuite name="Project Test Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>src</directory>
</whitelist>
</filter>
<listeners>
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
</listeners>
</phpunit>
如何复制
$ ./bin/phpunit // in project root
以下是输出:
#!/usr/bin/env php
PHPUnit 6.5.13 by Sebastian Bergmann and contributors.
Testing Project Test Suite
E 1 / 1 (100%)
Time: 35 ms, Memory: 6.00MB
There was 1 error:
1) App\Tests\Controller\ViewOrders\OrdersTest::testNoneOfTheOrdersCanBeAccepted
Error: Class 'App\Controller\ViewOrders\Orders' not found
/home/vadim/projects/webApp/tests/Controller/ViewOrders/OrdersTest.php:14
有什么想法吗?