我正在编写一些单元测试并忍受我,我对单元测试还是很陌生。
我遇到的问题是我的很多保存都会调用需要
用户 id的行为Yii::app()->user->id
。
但是,当我运行 UnitTest 时,由于用户未登录,我遇到了问题。
无论如何我可以通过标志(例如if ($isInTestingMode)
)忽略行为或在测试类中登录用户吗?
像这样的测试不是单元测试。单元测试用于测试类中的各个函数。“登录用户”涵盖大量代码(登录、会话管理、导航到特定页面等)。我相信您正在寻找功能测试。你可以在这里了解更多信息:http ://www.yiiframework.com/doc/guide/1.1/en/test.functional
我可能会构建一个您在测试中使用的用户对象。然后在适当的测试中(作为setup
方法的一部分,就像 ernie 在他的评论中描述的那样),交换测试用户对象。
测试用户对象将有一个像这样工作的方法:
public function getId() {
return 12;
}
public function getIsGuest() {
return false;
}
以上就是他们所说的“假”对象。
在您的设置方法中,您将使用以下几行:
Yii::app()->configure(array(
'components' => array(
'user' => array(
'class' => 'path.to.FakeUser',
)
)
));
如果您希望它成为默认用户,您也可以将其添加到您的测试配置文件中(然后在CWebUser/WebUser
需要有未登录用户的测试中交换普通模型。
或者您可以在每个单元测试中为您的 FakeUser (isLoggedIn = true/false) 设置一个标志。我自己可能会选择这个选项......