gpt4 book ai didi

unit-testing - PHPUnit:模拟不存在的类

转载 作者:行者123 更新时间:2023-12-03 15:18:12 25 4
gpt4 key购买 nike

是否可以在 PHPUnit 中创建一个不存在的类的模拟?
假设我有一些类创建另一个类的实例,例如:

class TaskRunner
{
public function runTasks()
{
// Run through some loop to get tasks and store each in $taskName
// Get task instance by given task name
$task = $this->getTaskInstance($taskName);
if ($task instanceof AbstractTask) {
$task->run();
}
}

protected function getTaskInstance($taskName)
{
// Just an example
return new $taskName();
}
}

我想为 runTasks 运行单元测试检查创建的任务实例是否扩展了一些抽象类的方法。
是否有可能不在文件系统中创建示例类来检查继承约束?
谢谢大家!

最佳答案

接受的答案是完美的,除了因为 PHPUnit 9 有一个问题,如果您需要模拟一个需要属于某个实例的类。在那种情况下 \stdclass::class不能使用。
并使用

$this->getMockBuilder('UnexistentClass')->addMethods(['foo'])->getMock();
将导致 Class UnexistentClass does not exist , 因为 addMethod根据给定的类方法检查给定的方法。
万一其他人遇到同样的问题,幸运 setMethods仍然有效,所以这仍然适用于 PHPUnit 9
$this->getMockBuilder('UnexistentClass')->setMethods(['foo'])->getMock();
请注意 setMethods将在 中删除PHPUnit 10
希望到时候能解决这个问题。例如检查 allowMockingUnknownTypes设置为 true .如果实现了该检查,这也将起作用:
$this->getMockBuilder('UnexistentClass')->allowMockingUnknownTypes()
->addMethods(['foo'])->getMock();

关于unit-testing - PHPUnit:模拟不存在的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28125444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com