虽然这可能是一个基本问题,但人们会假设使用require_once
,它实际上更复杂 - 至少对我而言。
我遇到的问题是我的项目结构很像Java中的包结构。我们如何使用全局名称空间。所以项目结构看起来像:
ProjectName/
ModuleOne/
Class.php
composer.json
tests/
phpunit.xml
bootstrap.php
Class_test.php
在上面的示例中,Class.php
将被实例化为:ProjectName\ModuleOne\Class();
现在问题是我们如何设置我们的测试目录,因为Class_test.php
将使用Class.php
以及任何其他依赖的类,我需要一些方法来允许我在我的测试中实例化,有问题的班级。当我试图得到一个错误,说它无法找到我试图实例化的问题。
虽然这可能是一种不寻常的做事方式,但项目是这样的,每个模块都可以使用composer导出,并使用我们选择的命名空间自动加载到您的项目中,在本例中为ProjectName
。< / p>
我似乎遇到的问题是我需要在tests/
目录之外的每个类都自动加载并准备就绪,这样如果Class.php
扩展到任何其他类,那么{{1}被告知它会知道,&#34;好的我需要去这里看看这个其他类是否也存在。&#34;
现在每个模块都有一个作曲家文件,里面我们有类似的东西:
Class.php
那么我可以在bootstrap.php中使用这个来自动加载整个模块以进行测试吗?
答案 0 :(得分:1)
我不会尝试重新发明轮子,我会选择作曲家建议的包装结构。
快速谷歌搜索给了我这篇博文的链接:How to create a PSR-4 PHP package。它几乎描述了作曲家包的文件结构应该如何以及如何设置和组织包的测试。
希望这有帮助。
修改强>
假设你有上面帖子中建议的结构,你需要做的就是告诉phpunit在哪里可以找到由composer创建的自动加载文件。如果您需要更复杂的引导,您可以执行以下操作。创建文件tests/bootstrap.php
并向其添加以下内容:
require_once 'path/to/composer/autoload.php';
// Set up your stubs, mocks etc.
在你的phpunit.xml文件中,你需要将phpunit指向正确的bootstrap文件,例如:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="tests/bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>
<testsuite name="Nacho Test Suite">
<directory suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
或者,您可以使用--bootstrap
标志运行phpunit,例如:
vendor/bin/phpunit --bootstrap path/to/bootstrap.php