提问人:Chubby Cows 提问时间:11/9/2023 最后编辑:Chubby Cows 更新时间:11/9/2023 访问量:32
如何正确使用phpunit中的“setMockClassName”和类字符串?
How to use `setMockClassName` from phpunit with a class-string correctly?
问:
最近,PHPUnit 的维护者对“setMockClassName”方法进行了更改,使其现在只接受类字符串而不是常规字符串。我目前正在我正在处理的代码库中处理此维护,但我正在努力正确实现这些更改。一些同事建议使用匿名课程(这也是我最初的直觉),所以我尝试了以下方法:
public function testSomeMethod(): void
{
$anonymousClass = new class() {
};
$mock = $this->getMockBuilder(MockClass::class)
->setMockClassName($anonymousClass::class)
->getMock();
// Test assertions go here
}
但是,这会导致被抛出。ClassAlreadyExistsException
因此,我决定定义一个单独的类并将其用作类名:
// This class is in the same directory, in "DumbClass.php"
namespace Org\Project\Package\Tests;
class DumbClass {
}
// This code is in "MyClassTest.php"
namespace Org\Project\Package\Tests;
final class MyClassTest extends TestCase
{
public function testSomeMethod(): void
{
$mock = $this->getMockBuilder(MockClass::class)
->setMockClassName(DumbClass::class)
->getMock();
// Test assertions go here
}
}
为了简单起见,我直接从供应商(vendor/bin/phpunit)运行,这个抛出一条消息,其中包含“ParseError:语法错误,意外的命名空间名称”My\Namespace\DumbC...“,需要标识符”
我尝试搜索各种论坛、PHPUnit 问题和 StackOverflow,但我没有发现其他人遇到同样的问题。我在这里做错了什么?
答: 暂无答案
评论
Mockery
Mockery