php 如何在Codecrement单元测试用例中使用Yii2用户标识?

xfb7svmp  于 2023-03-16  发布在  PHP
关注(0)|答案(1)|浏览(127)

我是单元测试的新手。尝试在我的Yii2项目中使用codecrement插件创建一些测试用例。从上一周开始我就在学习它。
现在我知道如何在单元测试中使用固定装置、模拟和存根了。
我只想问一下,在某些情况下,我们可以在单元测试中使用Yii2用户标识类吗?例如,可能有这样的情况,我们必须检查登录用户的某些条件。在这种情况下,如何在单元测试中使用用户会话或用户标识。

uplii1fm

uplii1fm1#

单元测试的思想是测试代码的一个单独的特定部分,比如函数或方法。如果你测试一个函数或方法,它有依赖关系,比如获取一个用户id或一条数据库记录,单元测试的目的是模拟或存根你方法的每一个依赖关系。
另一种方法是在测试中重新构建/重新创建引导应用程序,这意味着:调用正确的方法来创建用户对象,例如通过调用登录方法。
如果你想测试你的应用程序的整个部分,那么功能测试可能是适合你的测试类型。这里你从一个完整的引导应用程序开始,在那里你可以首先登录用户(调用用户页面),然后执行你的测试用例。
但是:
如果您在测试中只需要任何登录,则还可以为测试定义一个虚拟用户类。这意味着:
1.在config/test.php中添加类似于使用虚拟用户模型的内容:
'用户' =〉[ '身份类' =〉'应用程序\测试\模型\虚拟用户','登录网址' =〉['站点/登录'],'启用自动登录' =〉真,'启用会话' =〉真,],
1.在app\tests\models\DummyUser中创建一个虚拟用户模型,该模型实现IdentityIngterface所需的所有方法,如下所示:
命名空间应用\测试\模型;
使用yii\web\身份界面;使用应用程序\模型\用户;
类DummyUser扩展用户实现标识接口{ public $id =“Foo”;

public static function findIdentity($id)
 {   
     // always return the same dummy user
     return new static ([
         'id' => 'dummyUser',
         'email' => 'dummyUser@domain',
         'name' => 'Dummy User'

     ]);
 }

 public static function findGuestIdentity()
 {
      return new static ([
         'id' => 'guest',
         'email' => '',
         'name' => 'Guest User'

     ]);
 }

 public static function findGast()
 {
     return new static ([
         'id' => 'guest'
     ]);
 }
 /**
  * This method is needed to satisfy the interface.
  * {@inheritdoc}
  */
 public static function findIdentityByAccessToken($token, $type = null)
 {
     return true;
 }

 /**
  * This method is needed to satisfy the interface.
  * 
  * {@inheritdoc}
  */
 public function getId()
 {
     return true;
 }

 /**
  * This method is needed to satisfy the interface.
  * {@inheritdoc}
  */
 public function getAuthKey()
 {
     return "bar";
 }

 /**
  * This method is needed to satisfy the interface.
  * {@inheritdoc}
  */
 public function validateAuthKey($authKey)
 {
     return true;
 }

}
1.在单元测试中,使用Yii和虚拟用户模型use app\test\models\DummyUser,并在测试类的块之前运行一个假登录:
受保护的函数_before(){ $dummyLogin =虚拟用户::查找身份('dummyUser');Yii::$app-〉用户-〉登录($dummyLogin);}
现在,Yii 2用户身份在Yii 2 codecrement单元测试中可用。现在您在Yii 2中有了一个(假的)单元测试登录。

相关问题