phpunit 找不到类,PHP 致命错误
Posted
技术标签:
【中文标题】phpunit 找不到类,PHP 致命错误【英文标题】:phpunit cannot find Class, PHP Fatal error 【发布时间】:2013-09-27 08:38:12 【问题描述】:我得到了 phpunit 并将其安装为this link,使用最简单的方法进行测试。
我只是下载了 phpunit.phar 文件,chmod & rename & move to /usr/local/bin 然后,我运行 phpunit --version,就可以了。
PHPUnit 3.7.27 by Sebastian Bergmann
我写了一个简单的测试
public function testSomething()
$this -> assertTrue(true)
然后我进入源文件夹phpunit --colors Test
它有效。所以,我决定写一个复杂的演示。
我的项目文件夹结构是这样的。
Project Name
--> app
--> api
--> tests
现在我在app/api/FlyApi.php
写一个简单的类
<?php
class FlyApi
public function makeFly()
//do something else
然后我为 FlyApi.php 编写另一个测试类
<?php
class FlyApiTest extends PHPUnit_Framework_TestCase
public function testFly()
//new a FlyApi
$flyApi = new FlyApi();
//do something
在这一行 $flyApi = new FlyApi()
我得到了错误。
PHP 致命错误:在第 23 行的 /home/kevin/Workspace/fly/app/api/FlyApi.php 中找不到类“FlyApi”
是的,这条线$flyApi = new FlyApi()
【问题讨论】:
从技术上讲,您只是缺少需要FlyApi
的类定义,因为 PHPUnit 不会为您做一些神奇的自动加载。在测试之前提供被测单元是你的工作(或者如果该类还不存在:测试失败并导致 Phpunit 崩溃是完全可以的,因为测试是在 TDD 中的代码之前编写的)。跨度>
【参考方案1】:
尝试将您的 /api/
文件夹添加到您的 ClassLoader
app\start\global.php
。
你会发现这个部分:
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
...
app_path().'/api/
));
【讨论】:
【参考方案2】:你在使用 Laravel 的 phpunit.xml 文件吗?它包含 Laravel(和 Composer)的 autoload.php
文件,可让您在其中使用所有自动加载的类。
最后,整个错误是什么?它应该(希望)告诉您它正在尝试加载哪个类(如果命名空间错误或其他原因,它将为您提供线索)。
【讨论】:
【参考方案3】:您没有加载FlyApi
类的定义。
这个解决方案是 Laravel 特有的:
您应该扩展 TestCase
而不是 PHPUnit_Framework_TestCase
。
【讨论】:
以上是关于phpunit 找不到类,PHP 致命错误的主要内容,如果未能解决你的问题,请参考以下文章
PHPUnit CodeIgniter 生成夹具 PHP 致命错误:找不到类“PHPUnit_Framework_TestCase”
为啥,致命错误:在...中找不到类“PHPUnit_Framework_TestCase”?