gpt4 book ai didi

php - 如何更好地解耦我的数据层并限制我的单元测试范围?

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

我正在掌握单元测试并学习如何将我的代码分解成可测试的部分,但我不清楚的一件事是如何编写我的“更高级别”代码,例如我的 Controller 操作,以便测试 Controller 不需要通过实际的数据层(它在我的测试套件的其他地方独立测试)。

例如 - 我有一个用户验证,它接受用户名/密码并验证他们的帐户并返回登录成功/失败:

class Api_AuthController extends Zend_Controller_Action
{
public function validateUserAction()
{
// extract, clean and validate $username from POSTed data
// extract, clean and validate $password from POSTed data

// access the data layer
$accountMapper = new Application_Model_Mapper_Account();
$accounts = $accountMapper(find(array('username' => $username, 'password' => $password));

if (count($accounts) == 1) {
// success
} else {
// failure
}
}
}

如前所述 - Application_Model_Mapper_Account 及其 find() 方法已经在另一个单元测试中进行了测试,因此它是多余的(并且据我了解单元测试 - 不可取,不是提到它不必要地减慢了我的测试速度)在这里再次测试,因为我真正需要测试的是操作区分查找函数的两个可能结果的能力。

那么 - 我如何将映射器和模型的模拟替换到此操作中,以便我可以限制 validateUserAction 测试的范围?

最佳答案

我来自 .net 世界,但我们使用 Inversion of Control containers to allow us to inject any dependencies进入 Controller 。通过这种方式,您可以模拟任何依赖项以按照您的意愿行事,并将测试重点放在操作上。

关于php - 如何更好地解耦我的数据层并限制我的单元测试范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222001/

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