【发布时间】:2011-09-07 11:56:53
【问题描述】:
我开始掌握单元测试并学习如何将我的代码分解为可测试的部分,但我不清楚的一件事是如何编写我的“更高级别”代码,例如我的控制器操作,因此测试控制器不需要通过实际的数据层(在我的测试套件的其他地方独立测试)。
例如 - 我有一个用户验证,它接受用户名/密码并验证他们的帐户并返回登录成功/失败:
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() 方法已在另一个单元测试中进行了测试,因此在此处再次测试是多余的(据我所知,单元测试 - 不可取,更不用说它不必要地减慢了我的测试速度) ,因为我真正需要测试的是动作区分 find 函数的两种可能结果的能力。
那么 - 我如何将映射器和模型的模拟替换到此操作中,以便我可以限制 validateUserAction 测试的范围?
【问题讨论】:
-
@BiggsTRC - 感谢编辑
-
大声笑,没问题。我只是更改了一个单引号,以使您的代码格式正确。
标签: php unit-testing zend-framework architecture