【发布时间】:2013-09-07 08:53:12
【问题描述】:
我正在以模块化方式开发应用程序,也就是说,我有一个接口,我想对实现该接口的所有类进行单元测试,所以我创建了一个实现所有逻辑的抽象类(测试类是否实际实现了接口,测试返回值等等)但是当我尝试继承抽象类时,我得到一个class not found exception 我正在使用命名空间,所以我的目录结构是这样的
namespaceA
|->abstract.php
|->namespaceB
|->pluginTest.php
所以我的 pluginTest.php 类定义是这样的
namespace namespaceA\namespaceB;
use namespaceA\Abstract;
class pluginTest extends Abstract
显然在我的抽象类中有 namespaceA 定义,我也尝试手动包含文件 (include("../Abstract.php")) 但它失败了,但由于我使用了一段时间的自动加载,也许我不太记得如何要手动导入,我也尝试过使用类的别名 (using namespaceA\Abstract as X) 并在命名空间A 之前放置一个\,但没有任何效果,我做错了什么,或者我缺少什么
==edit==
我设法使用
加载类include __DIR__ ."/../Abstract.php";
但仍然没有自动加载
【问题讨论】:
-
你不需要导入它,总是使用自动加载
-
在你的 phpunit.xml 中你可以指定引导文件的位置,在那里设置所有的自动加载。例如github.com/ZF-Commons/ZfcUser/blob/master/tests/phpunit.xml 和github.com/ZF-Commons/ZfcUser/blob/master/tests/bootstrap.php
-
@Xerkus 我知道,我只是想看看它是否可以加载,而且我使用此页面中的 zend 文档进行了引导framework.zend.com/manual/2.1/en/tutorials/unittesting.html,但仍然没有
-
尝试将您的 abstract.php 重命名为 Abstract.php。使用 psr0 自动加载区分大小写
-
好吧,真正的类名是
testAbstract(testAbstract.php) 和pluginTest(pluginTest.php),事实上自动加载正在另一个命名空间工作,(pluginTest 从另一个命名空间加载一个类),但它不适用于父类
标签: php namespaces zend-framework2 phpunit autoload