如何加载我需要的文件? PHP
尽管这可能是一个基本的问题,但人们会假定使用require_once
,但实际上它更复杂 - 至少对我而言。如何加载我需要的文件? PHP
我遇到的问题是我的项目结构很像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
。
我似乎遇到的问题是,我需要每一个类被自动加载tests/
目录,并准备到外面去,这样如果Class.php
延伸的任何其他类,然后当Class.php
被调用时就知道了,“好,我需要去这里看看这个其他班是否也存在。“
现在每个模块确实有一个作曲家文件,里面我们也有类似:
"autoload": {
"psr-0": {
"ProjectName\\ModuleOne\\": ""
}
},
这样我就可以使用这个一些如何在bootstrap.php中自动负载测试目的这整个模块?
我不会试图重新发明*,我会去与作曲家建议的包装结构。
快速谷歌搜索给了我这个博客文章的链接:How to create a PSR-4 PHP package。它非常详细地描述了作曲家包的文件结构应该如何,以及如何设置和组织你的包的测试。
希望这会有所帮助。
编辑:
假设你在上面后建议的结构,所有你需要做的就是告诉PHPUnit的在哪里可以找到由作曲家创建的自动加载的文件。如果您需要更复杂的引导程序,可以执行以下操作。创建一个文件tests/bootstrap.php
,并添加以下内容吧:
require_once 'path/to/composer/autoload.php';
// Set up your stubs, mocks etc.
在你phpunit.xml文件,你需要点PHPUnit的正确引导文件,如:
<?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>
或者你可以运行PHPUnit的与--bootstrap
标志,如:
vendor/bin/phpunit --bootstrap path/to/bootstrap.php
那就是我是如何做事的,因为我从Zend Framework偷走了我的设置。所以我坚持习惯。我只是没有向你展示我的所有composer.json文件。 那么如何使用与phpunit相关的composer.json来加载这个模块呢? – TheWebs
如果你的类是由composer自动加载的,并且如果你不需要任何额外的bootstrapping用于你的测试,可以在你的phpunit.xml配置文件中添加'bootstrap =“vendor/autoload.php”'(如上面链接所示)。我将编辑显示答案给你一个额外的引导示例。 –
你能包括autoload.php文件作曲家在bootstrap.php中产生? – STLMikey