运行单个测试时未找到PHPUNIT_Framework_测试用例
我正在尝试使用PHPUnit测试Laravel 5.2.10。我已经在我的项目中本地安装了PHPUnit 5.1.4 当我跑步时:运行单个测试时未找到PHPUNIT_Framework_测试用例,php,laravel,phpunit,Php,Laravel,Phpunit,我正在尝试使用PHPUnit测试Laravel 5.2.10。我已经在我的项目中本地安装了PHPUnit 5.1.4 当我跑步时: phpunit phpunit tests/unit/testThatFails.php PHPUnit完美地运行我的test目录中的所有测试 但是,当我跑步时: phpunit phpunit tests/unit/testThatFails.php 我得到: PHP Fatal error: Class 'PHPUNIT_Framework_TestC
phpunit
phpunit tests/unit/testThatFails.php
PHPUnit完美地运行我的test
目录中的所有测试
但是,当我跑步时:
phpunit
phpunit tests/unit/testThatFails.php
我得到:
PHP Fatal error: Class 'PHPUNIT_Framework_TestCase' not found in ...
奇怪的是,当我运行phpunit时,它成功地运行了test目录中的每个测试,包括这个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\u Framework\u TestCase
来规避这个问题,我的测试能够按预期运行。然而,这只是一种规避,而不是一种解决方案。(考虑到TestCase
本身最终从PHPUNIT\u Framework\u TestCase
PHPUNIT加载配置文件PHPUNIT.xml
(请参见)扩展而来,这对我来说也很奇怪
...
bootstrap="tests/bootstrap.php"
...
正是bootstrap.php
加载了autoloader
,从而使所有这些类在应用程序中可用
require __DIR__.'/../vendor/autoload.php';
autoload.php
可能不包括在testThatFails.php
中。autoload php
加载PHPUNIT\u Framework\u TestCase
以及可能与此案例相关的其他文件/类(一些其他单元测试类,等等).IMHO除了将其包含在phpunit.xml
中之外,最好的方法是将引导文件作为参数包含在命令中
phpunit --bootstrap bootstrap/autoload.php testThatFails.php
消息说是
PHPUNIT\u Framework\u TestCase
,但是这个类实际上被称为PHPUNIT\u Framework\u TestCase
- PHP中的类名不区分大小写,这就是为什么当您运行整个测试套件并且类已经加载时,它会工作。但是
- 自动加载程序区分大小写,因为您的文件系统区分大小写,并且无法猜出正确的大小写
PHPUNIT\u Framework\u TestCase
,自动加载程序将查找文件PHPUNIT/Framework/TestCase.php
,而不是PHPUNIT/Framework/TestCase.php
。该文件不存在,您将收到“未找到类”错误
解决方案
替换
class TestThatFails extends PHPUNIT_Framework_TestCase
与
您能否详细说明为什么在我运行
phpunit
时加载类,而不是在我尝试运行特定测试时加载类?您建议的命令用于运行所有测试。我已经可以成功运行所有测试。由于某些原因,当我尝试并单选一个测试时,该类无法解析。我已更新了qu如果要包含我的phpunit.xml
文件,可能其中隐藏了一个解释?@tam您可以指定要在引导文件之后立即运行的测试。请参阅我的更新答案。啊,我明白了,我认为这可能是一个选项,谢谢。问题是,我仍然收到相同的错误!:(@tambootstrap/autoload.php
的内容是什么?啊……回答得很好。直到你指出,我才意识到案例的不同。也谢谢你的清晰解释。现在一切都是绿色的:)