gpt4 book ai didi

php - 在 PHPUnit 中模拟具有内部依赖关系的对象

转载 作者:搜寻专家 更新时间:2023-10-31 20:44:01 24 4
gpt4 key购买 nike

我是测试新手,我想了解如何在真实场景中实现测试。例如,有这段代码实现了一个内部框架,并采用了方法链接。乍一看,我认为模拟是最好的方式,但大多数例子都是这样的:

public function someFunction(A $a)
{
return $a * b;
}

但是,我正在测试的代码是这样的:

public function deleteUser($user_id)
{
$user_id = (int)$user_id;
$flag = Framework::getInstance()->request->get('delete') || false;

if (!$this->exists($user_id)) {
throw new UserException(UserException::NOT_EXIST);
}

return $this->delete([
'id' => $user_id
]);
}

你会如何测试它?

我查看了“Testing objects with dependencies in PHPUnit”,但无法修改实际代码。

最佳答案

简短回答:您无法对该代码进行单元测试。由于静态方法调用,代码与 Framework 类的耦合度太高,因此您无法单独测试 deleteUser() 方法。 This article关于测试使用单例的代码很好地描述了这种情况。

长话短说,您无法对该代码进行单元测试,但您仍然可以创建有用的测试,例如集成测试或功能测试。您可以使用 this question作为引用,但基本上,在集成测试中,您测试代码的多个部分同时协同工作。在这种测试中,您可以测试此方法的预期行为,即删除用户,而不必担心您的类的依赖性。你想测试两个类(被测类和框架类)一起工作,所以你不需要模拟任何东西。

话虽如此,为什么不能直接改代码呢?我强烈建议将依赖项注入(inject)您的代码(如第一篇文章中所述),而不是使用单例。

关于php - 在 PHPUnit 中模拟具有内部依赖关系的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541604/

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