gpt4 book ai didi

php - 解耦还是模拟?

转载 作者:搜寻专家 更新时间:2023-10-31 21:05:58 25 4
gpt4 key购买 nike

假设我有这个类:

class SomeClass
{
// Top level function
public function execute($command)
{
// Get output from system tool
$output = $this->runTool($command);

// Check output for errors
if ($this->hasError($output))
return false;

// And parse success response from tool
return $this->parseOutput($output);
}

// There we're make a call to system
private function runTool($command)
{
return `/some/system/tool $command`;
}
[...]
}

我不想在我的测试中运行系统工具,我想用预定义的输出替换系统调用。

所以,问题是 - 我应该创建另一个类,在其中移动系统调用并在测试中模拟该类,还是我可以只模拟我将测试的类的那个函数?

当然,这两种方法都行得通,但哪种方法更适合测试目的?

最佳答案

如果遵循单一职责原则,就不会出现这个问题。您的类不需要知道系统调用是如何进行的,因此您将不得不使用另一个类。你 mock 那个。

IMO,在大多数情况下,当您需要模拟 protected 或私有(private)方法时,它们会做一些应该放在另一个类中并被模拟的事情。

关于php - 解耦还是模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32371503/

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