我正在尝试使用 Laravel 5.2.10 进行PHPUnit测试。我在项目中本地安装了 PHPUnit 5.1.4 。
当我跑步时:
phpunit
PHPUnit完美地运行我test
目录中的所有测试。
然而,当我跑步时:
phpunit tests/unit/testThatFails.php
我明白了:
PHP Fatal error: Class 'PHPUNIT_Framework_TestCase' not found in ...
奇怪的是,当我运行phpunit时,它会成功运行测试目录中的每个测试,包括这个testThatFails.php
就好了。
当我尝试只运行一次测试时为什么会中断?
更新
这是我的phpunit.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="bootstrap/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">app/</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>
</phpunit>
更新
目前,由于我使用的是Laravel,我通过扩展TestCase
而不是PHPUNIT_Framework_TestCase
绕过这个问题,我的测试能够按预期运行。但是,这只是规避而非解决方案。 (我也很奇怪,鉴于TestCase
本身最终从PHPUNIT_Framework_TestCase
扩展而来,这是有效的。
答案 0 :(得分:9)
消息显示PHPUNIT_Framework_TestCase
,但该类实际上称为PHPUnit_Framework_TestCase
。现在这是棘手的事情
因此,当您单独运行测试时,在包含测试用例文件之前未加载类PHPUNIT_Framework_TestCase
,并且自动加载器将查找文件PHPUNIT/Framework/TestCase.php
而不是PHPUnit/Framework/TestCase.php
。此文件不存在,您收到未找到的&#34;类&#34;错误。
替换
class TestThatFails extends PHPUNIT_Framework_TestCase
与
class TestThatFails extends PHPUnit_Framework_TestCase
答案 1 :(得分:2)
PHPUnit加载实际保存有关引导文件信息的配置文件phpunit.xml
(参见here)
...
bootstrap="tests/bootstrap.php"
...
bootstrap.php
加载autoloader
,从而使您的应用中的所有课程都可用。
require __DIR__.'/../vendor/autoload.php';
可能autoload.php
未包含在testThatFails.php
中。 autoload php
加载PHPUNIT_Framework_TestCase
以及可能与此案例相关的其他文件/类(其他一些单元测试类等)。恕我直言,除了在phpunit.xml
中包含它之外,最好的方法是将bootstrap文件作为参数包含在命令中
phpunit --bootstrap bootstrap/autoload.php testThatFails.php