我有以下项目结构
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
。当我尝试从TestUtils::utilityMethod()
拨打MySDKTest.php
时,phpunit会抱怨找不到班级TestUtils
。
我一直在阅读有关添加autoload-dev密钥的信息,我尝试过这些密钥,但到目前为止,似乎没有任何工作。我应该澄清一下,我可以在MySDK
内使用SDKHelper
和MySDKTest
方法。 MySDKTest.php
工作时看起来像这样:
use MyPackage\MySDK;
class MySDKTest extends PHPUnit_Framework_TestCase {
public function testPackage() {
$sdk = new MySDK();
$sdk->exampleMethod();
}
}
答案 0 :(得分:1)
应该很简单。 Composer的PSR-4自动加载器只定义了从命名空间到文件夹的映射。
您的测试是否正确命名空间?看起来他们不是因为你的测试类顶部有use
。如果MySDK
位于名称空间MyPackage
(完全限定MyPackage\MySDK
),我希望MySDKTest
也位于MyPackage
MyPackage\MySDKTest
命名空间中。它不一定是那样 - 如果你愿意,可以将测试放在不同的命名空间中。
无论如何,它不起作用的原因是您没有使用自动加载器注册测试文件夹。当前设置你的东西的方式,你的自动加载器配置应如下所示:
{
"autoload": {
"psr-4": { "MyPackage\\": ["src/MyPackage/", "test/"] }
}
}
此外,您还需要在测试类中将use MyPackage\MySDK;
更改为namespace MyPackage;
。
注意强>
你的文件夹结构有点奇怪。我希望test
与src
匹配。所以它会是这样的:
test/
├─ MyPackage/
├─ MySDK.php
└─ SDKHelper.php
相应地调整命名空间:
{
"autoload": {
"psr-4": { "MyPackage\\": ["src/MyPackage", "test/MyPackage"] }
}
}