1.生成测试文件比如我的模型有一个AdminUser类需要测试,我需要生成相应的测试文件,那么我们就可以使用下面的命令生成对应的测试文件vendor\bin\codeceptgenerate:testunit\models\AdiminUser执行结果如下2.编写测试用例我们生成的测试用例是这样的(AdiminUserTest.php):命名空间模型;/***Gy的AdiminUserTest类*@packagemodels*/classAdiminUserTestextends\Codeception\Test\Unit{/***@var\UnitTester*/protected$tester;protectedfunction_before(){}protectedfunction_after(){}//testspublicfunctiontestSomeFeature(){}}现在让我们修改这个文件,让它可以进行简单的处理。此处的assertTrue方法用于进行真假断言。当然,还有很多其他类型的断言,比如:assertInternalType;断言等于;assertInstanceOf...你可以查看更多断言详细命名空间模型;/***ClassAdiminUserTestbygy*@packagemodels*/classAdiminUserTestextends\Codeception\Test\Unit{/***@var\UnitTester*/protected$tester;protectedfunction_before(){}protectedfunction_after(){}//测试publicfunctiontestSomeFeature(){$this->assertTrue(1==1);}publicfunctiontestFunction1(){$this->assertTrue(3>1);}//这显然是错误的publicfunctiontestFunction2(){$this->assertTrue(3<1);}}现在我们可以使用命令来执行我们的测试用例是:vendor\bin\codeceptrununit\models\AdiminUserTest执行结果如下(3次成功,1次失败),testFunction2有明显的错误,不会有修正后的故障。现在我们已经学习了简单断言。但是,我们没有忘记这个测试用例旨在对AdminUser模型类进行单元测试。接下来,我们必须真正开始正事。3、对指定类进行单元测试首先,我的AdminUser类如下(AdminUser.php):公共$用户名;公共$密码;公共$authKey;公共$accessToken;privatestatic$users=['100'=>['id'=>'100','username'=>'admin','password'=>'admin','authKey'=>'test100key','accessToken'=>'100-token',],'101'=>['id'=>'101','username'=>'demo','password'=>'demo','authKey'=>'test101key','accessToken'=>'101-token',],];/***{@inheritdoc}*/publicstaticfunctionfindIdentity($id){returnisset(self::$users[$id])?新静态(self::$users[$id]):空;}/***{@inheritdoc}*/公共静态函数findIdentityByAccessToken($token,$type=null){foreach(self::$usersas$user){if($user['accessToken']===$token){returnnewstatic($user);}}返回空值;}/***通过用户名查找用户**@paramstring$username*@returnstatic|null*/publicstaticfunctionfindByUsername($username){foreach(self::$usersas$user){if(strcasecmp($user['username'],$username)===0){returnnewstatic($user);}}返回空值;}/***{@inheritdoc}*/publicfunctiongetId(){return$this->id;}/***{@inheritdoc}*/publicfunctiongetAuthKey(){return$this->authKey;}/***{@inheritdoc}*/publicfunctionvalidateAuthKey($authKey){return$this->authKey===$authKey;}/***验证密码**@paramstring$password要验证的密码*@returnbool如果提供的密码对当前用户有效*/publicfunctionvalidatePassword($password){return$this->password===$password;}}我们要在AdiminUserTest中测试上面的类,第一步是能够加载类。我们知道现在大部分框架都是使用psr-4规则的/vendor/autoload.php来完成自动加载的。当然yii2和Itscodeception也是一样的。这里稍微多说一点,以后遇到这个问题再详细说。命名空间模型;使用app\models\AdminUser;/***Gy*@packagemodels*/classAdiminUserTestextends\Codeception\Test\Unit{/***@var\UnitTester*/protected$tester;protectedfunction_before(){}protectedfunction_after(){}//测试publicfunctiontestFindUserById(){expect_that($user=AdminUser::findIdentity(100));expect($user->username)->equals('admin');expect_not(AdminUser::findIdentity(999));}publicfunctiontestFindUserByAccessToken(){expect_that($user=AdminUser::findIdentityByAccessToken('100-token'));expect($user->username)->equals('admin');expect_not(AdminUser::findIdentityByAccessToken('不存在'));}publicfunctiontestFindUserByUsername(){expect_that($user=AdminUser::findByUsername('admin'));expect_not(AdminUser::findByUsername('not-admin'));}/***@dependstestFindUserByUsername*/publicfunctiontestValidateUser($user){$user=AdminUser::findByUsername('admin');expect_that($user->validateAuthKey('test100key'));expect_not($user->validateAuthKey('test102key'));expect_that($user->validatePassword('admin'));expect_not($user->validatePassword('123456'));}}expect_that:assumetrueexpect_not:assumefalse和我们用的assertFalse和assertTrue是同一个意思,我们执行一下命令,看看当前的是不是我们想象的那样。vendor\bin\codecept运行unit\models\AdiminUserTest4个测试方法,12个断言都没有问题,执行成功。综上所述,至此我们的小目标已经基本实现,基本可以完成生成测试文件和测试相关单元的目标。当然,我们还有一些问题需要解决。比如我们测试用的数据还是模型的静态变量(不够真实);我们有100个模型类,是否需要手动一一生成测试类;如果我们的项目文件结构改变了一些东西,就会遇到一些问题。不过没关系,我们会在接下来的几篇文章中介绍相关内容。
