运行单个测试时未找到PHPUNIT_Framework_测试用例

运行单个测试时未找到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测试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_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您可以指定要在引导文件之后立即运行的测试。请参阅我的更新答案。啊,我明白了,我认为这可能是一个选项,谢谢。问题是,我仍然收到相同的错误!:(@tam
bootstrap/autoload.php
的内容是什么?啊……回答得很好。直到你指出,我才意识到案例的不同。也谢谢你的清晰解释。现在一切都是绿色的:)