我正在编写一些单元测试并且忍受我对单元测试我还很新。Yii单元测试用登录网页用户
我遇到的问题是我的很多保存调用的行为需要
用户id从Yii::app()->user->id
。
然而,当我运行单元测试,我得到的问题在用户没有登录。
有反正我可以无视标志的行为(例如if ($isInTestingMode)
)或登录用户在测试中类?
我正在编写一些单元测试并且忍受我对单元测试我还很新。Yii单元测试用登录网页用户
我遇到的问题是我的很多保存调用的行为需要
用户id从Yii::app()->user->id
。
然而,当我运行单元测试,我得到的问题在用户没有登录。
有反正我可以无视标志的行为(例如if ($isInTestingMode)
)或登录用户在测试中类?
我可能会建立一个你在测试中使用的用户对象。然后在适当的测试中(作为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)设置一个标志,我可能会自己选择这个选项...
像这样的测试不是单元测试秒。单元测试用于测试课程中的各个功能。 “登录用户”涵盖大量代码(登录,会话管理,导航到特定页面等)。我相信你正在寻找功能测试。你可以在这里了解更多:http://www.yiiframework.com/doc/guide/1.1/en/test.functional
这就是说,你将如何*单元测试*一个单一的方法,其中一个调用用户 - >编号? – physicalattraction
你会测试如何使用该属性。例如,如果方法返回'user-> id'的输出结果,你会检查你的user-> id'的值是否与返回值匹配。或者,如果该函数在另一个函数调用中使用该值,则可以对正在调用的第二个函数进行存根操作,并检查它是否与您期望的参数一起被调用。 –
我会这样做的方式是为登录用户设置一组测试,另一组用于未登录用户,不同之处在于设置方法,其中一个包括登录用户的代码。 。 。 – ernie