我有以下项目结构
src/
├─ MyPackage/
├─ MySDK.php
└─ SDKHelper.php
test/
├─ MySDKTest.php
└─ TestUtils.php
composer.json
composer.lock
我的 composer.json 文件如下所示:
"autoload": {
"psr-4": {
"MyPackage\": "src/MyPackage"
}
}
一切都很好,MySDKTest.php
单元测试都通过了,直到我尝试将一些实用程序方法添加到第三个文件TestUtils.php
.当我尝试从MySDKTest.php
调用TestUtils::utilityMethod()
时,phpunit抱怨找不到类TestUtils
。
我一直在阅读有关添加自动加载开发密钥的信息,我已经尝试过的变化,但到目前为止,似乎没有任何效果。我应该澄清一下,我能够在MySDKTest
内部使用MySDK
和SDKHelper
方法。 MySDKTest.php
工作时看起来像这样:
use MyPackageMySDK;
class MySDKTest extends PHPUnit_Framework_TestCase {
public function testPackage() {
$sdk = new MySDK();
$sdk->exampleMethod();
}
}
它应该很简单。作曲家的 PSR-4 自动加载器只定义了从命名空间到文件夹的映射。
您的测试是否正确命名?看起来他们不是,因为你在测试类的顶部有一个use
。如果MySDK
在 namepace MyPackage
(完全限定的MyPackageMySDK
)中,我希望MySDKTest
也在 MyPackageMySDKTest
的 MyPackage
命名空间中。它不必是那样的 - 如果您愿意,您可以将测试放在不同的命名空间中。
无论如何,它不起作用的原因是您没有向自动加载器注册测试文件夹。它看起来像你的东西当前设置的方式,你的自动加载机配置应该看起来像这样:
{
"autoload": {
"psr-4": { "MyPackage\": ["src/MyPackage/", "test/"] }
}
}
此外,您需要在测试类中将use MyPackageMySDK;
更改为namespace MyPackage;
。
注意
您的文件夹结构有点奇怪。我希望test
能匹配src
.所以它会是这样的:
test/
├─ MyPackage/
├─ MySDK.php
└─ SDKHelper.php
相应地调整命名空间:
{
"autoload": {
"psr-4": { "MyPackage\": ["src/MyPackage", "test/MyPackage"] }
}
}