2

我正在编写一些单元测试并忍受我,我对单元测试还是很陌生。

我遇到的问题是我的很多保存都会调用需要
用户 id的行为Yii::app()->user->id

但是,当我运行 UnitTest 时,由于用户未登录,我遇到了问题。

无论如何我可以通过标志(例如if ($isInTestingMode))忽略行为或在测试类中登录用户吗?

4

2 回答 2

3

像这样的测试不是单元测试。单元测试用于测试类中的各个函数。“登录用户”涵盖大量代码(登录、会话管理、导航到特定页面等)。我相信您正在寻找功能测试。你可以在这里了解更多信息:http ://www.yiiframework.com/doc/guide/1.1/en/test.functional

于 2014-03-11T23:14:16.093 回答
3

我可能会构建一个您在测试中使用的用户对象。然后在适当的测试中(作为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) 设置一个标志。我自己可能会选择这个选项......

于 2013-09-27T18:36:03.297 回答