【发布时间】:2021-12-14 03:32:20
【问题描述】:
在 Phpunit 的上下文中,我一直在我的 Test 类中添加一些函数,我计划在其他测试中重用它们。
我的计划是让另一个类驻留在测试文件夹中继承。类是继承经典的 TestCase 并添加我的额外方法。我在 IDE 中没有收到任何错误,但 Phpunit 找不到自定义类并崩溃并显示错误消息。
我试着把它放在一个特质中。也不行。
同时我正在测试我可以在同一个文件夹中创建一个“用户”类,并且我能够很好地实例化它,所以我停止调整命名空间,因为它似乎不是问题。我最终创建了一个带有静态方法的类并静态调用方法。
但我很好奇为什么它会这样。这是我第一次面临这样的情况。我可以在文件中实例化类,但不能扩展或将它们用作特征。
这是我试图让我的测试继承自的类:
<?php
use PHPUnit\Framework\TestCase as BaseTestCase;
class TestCase extends BaseTestCase
{
public static function doSomething($params)
{
// ...
}
}
这是调用它的测试类:
<?php
use Model\Course;
//use PHPUnit\Framework\TestCase;
class CourseTest extends TestCase
public function setUp(): void
{
$this->student = new Student();
}
}
按照@hakre 提供的链接,我一直在玩弄作曲家自动加载和命名空间,如下所示:
"autoload-dev": {
"psr-4": { "Tests\\": "tests/" }
},
然后
"autoload-dev": {
"psr-4": { "": "tests/" }
},
我已经相应地更改了自定义 TestCase 类的命名空间(将“Test/”添加到命名空间)。我尝试在不更改 CourseTest 的命名空间的情况下对其进行测试,但无济于事。 唯一的区别是,当我将“空”命名空间链接到自动加载中的测试目录时,如果我让它扩展了标准的 Phpunit TestCase 类,则 Student 类在 CourseTest 中被识别和实例化,只要我让它扩展我的自定义 TestCase 类我再次出现以下错误:
Class "TestCase" not found in phar://G:/dev/phpbin/phpunit-9.5.10.phar/phpunit/TextUI/Command.php:95
【问题讨论】:
-
你能发布任何示例代码吗?它会抛出任何错误吗?你说你可以实例化其他类,但听起来你要么需要
require基类,要么你的命名空间发生了一些奇怪的事情。 -
这能回答你的问题吗? stackoverflow.com/q/18880067/367456
-
谢谢@hakre,在那个链接中有值得深思的地方。但解决方案是提供给另一个 SO 页面的链接。我现在将发布解决方案。
标签: php oop inheritance namespaces phpunit