摘要:但是,我們沒有忘記,這個(gè)測(cè)試用例本意是要對(duì)這個(gè)類做單元測(cè)試的。三對(duì)指定的類進(jìn)行單元測(cè)試首先我的的類如下我們要在中去對(duì)上述的類做測(cè)試,第一步做的就是要能加載到該類。
一、生成測(cè)試文件
比如說我的models有一個(gè)需要測(cè)試得AdminUser類,我需要生成相應(yīng)得測(cè)試文件,那么我們可以使用下面得命令生成相應(yīng)得測(cè)試文件
vendorincodecept generate:test unit modelsAdiminUser
執(zhí)行結(jié)果如下
我們生成的測(cè)試用例是這個(gè)樣子的(AdiminUserTest.php):
namespace models; /** * Class AdiminUserTest by gy * @package models */ class AdiminUserTest extends CodeceptionTestUnit { /** * @var UnitTester */ protected $tester; protected function _before() { } protected function _after() { } // tests public function testSomeFeature() { } }
現(xiàn)在我們來修改這個(gè)文件,使它能完成簡(jiǎn)單的處理。這里的assertTrue方法,是用來做真假斷言用的。當(dāng)然還有很多其他種類的斷言,如:assertInternalType;assertEquals;assertInstanceOf……可以查看更多斷言詳細(xì)
namespace models; /** * Class AdiminUserTest by gy * @package models */ class AdiminUserTest extends CodeceptionTestUnit { /** * @var UnitTester */ protected $tester; protected function _before() { } protected function _after() { } // tests public function testSomeFeature() { $this->assertTrue(1==1); } public function testFunction1() { $this->assertTrue(3 > 1); } //這個(gè)是明顯錯(cuò)誤 public function testFunction2() { $this->assertTrue(3 < 1); } }
現(xiàn)在我們可以使用命令執(zhí)行我們的測(cè)試用例了:
vendorincodecept run unit modelsAdiminUserTest
執(zhí)行結(jié)果如下所示(3個(gè)成功,1個(gè)失?。瑃estFunction2有明顯錯(cuò)誤,改正以后會(huì)沒有失敗數(shù)量的
好了現(xiàn)在我們已經(jīng)學(xué)會(huì)了簡(jiǎn)單的斷言。但是,我們沒有忘記,這個(gè)測(cè)試用例本意是要對(duì)AdminUser這個(gè)model類做單元測(cè)試的。接下來我們要真正的步入正題了。
三、對(duì)指定的類進(jìn)行單元測(cè)試首先我的AdminUser的類如下(AdminUser.php):
namespace appmodels; class AdminUser extends yiiaseBaseObject implements yiiwebIdentityInterface { public $id; public $username; public $password; public $authKey; public $accessToken; private static $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} */ public static function findIdentity($id) { return isset(self::$users[$id]) ? new static(self::$users[$id]) : null; } /** * {@inheritdoc} */ public static function findIdentityByAccessToken($token, $type = null) { foreach (self::$users as $user) { if ($user["accessToken"] === $token) { return new static($user); } } return null; } /** * Finds user by username * * @param string $username * @return static|null */ public static function findByUsername($username) { foreach (self::$users as $user) { if (strcasecmp($user["username"], $username) === 0) { return new static($user); } } return null; } /** * {@inheritdoc} */ public function getId() { return $this->id; } /** * {@inheritdoc} */ public function getAuthKey() { return $this->authKey; } /** * {@inheritdoc} */ public function validateAuthKey($authKey) { return $this->authKey === $authKey; } /** * Validates password * * @param string $password password to validate * @return bool if password provided is valid for current user */ public function validatePassword($password) { return $this->password === $password; } }
我們要在AdiminUserTest中去對(duì)上述的類做測(cè)試,第一步做的就是要能加載到該類。我們知道,現(xiàn)在大部分框架都是使用psr-4規(guī)則的/vendor/autoload.php來完成自動(dòng)加載的,當(dāng)然yii2和它的codeception也是一樣的。這邊是多說了一些,等我們后續(xù)遇到這個(gè)問題了,再詳細(xì)說。
namespace models; use appmodelsAdminUser; /** * Class AdiminUserTest by gy * @package models */ class AdiminUserTest extends CodeceptionTestUnit { /** * @var UnitTester */ protected $tester; protected function _before() { } protected function _after() { } // tests public function testFindUserById() { expect_that($user = AdminUser::findIdentity(100)); expect($user->username)->equals("admin"); expect_not(AdminUser::findIdentity(999)); } public function testFindUserByAccessToken() { expect_that($user = AdminUser::findIdentityByAccessToken("100-token")); expect($user->username)->equals("admin"); expect_not(AdminUser::findIdentityByAccessToken("non-existing")); } public function testFindUserByUsername() { expect_that($user = AdminUser::findByUsername("admin")); expect_not(AdminUser::findByUsername("not-admin")); } /** * @depends testFindUserByUsername */ public function testValidateUser($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: 假設(shè)為true
expect_not: 假設(shè)為false
和我們用assertFalse和assertTrue意義是一樣的
好了,我們來執(zhí)行命令吧??纯船F(xiàn)在的會(huì)不會(huì)如我們?cè)O(shè)想的一般。
vendorincodecept run unit modelsAdiminUserTest
4個(gè)測(cè)試方法,12個(gè)斷言都沒有問題,執(zhí)行成功。
總結(jié),至此我們的小小目標(biāo)基本達(dá)成,生成測(cè)試文件,測(cè)試相關(guān)單元的目標(biāo)基本都可以完成了。當(dāng)然,我們還是有一些問題亟待解決的,比如說,我們用來測(cè)試的數(shù)據(jù)還是models的靜態(tài)變量(不夠真實(shí));我們有100個(gè)model類難道要一個(gè)個(gè)手動(dòng)生成測(cè)試類;如果我們項(xiàng)目文件結(jié)構(gòu)有所改變的話也會(huì)會(huì)遇到一些問題。不過沒關(guān)系,我們?cè)俳酉聛淼膸灼恼吕飼?huì)介紹相關(guān)的內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/31987.html
摘要:一簡(jiǎn)介作為工程師,我們很可能遇到一些有必要的進(jìn)行單元測(cè)試的場(chǎng)景。本系列文章就來介紹下,在框架下,如何使用進(jìn)行單元測(cè)試。 一、簡(jiǎn)介 作為php工程師,我們很可能遇到一些有必要的進(jìn)行單元測(cè)試的場(chǎng)景。本系列文章就來介紹下,在Yii2框架下,如何使用Codeception進(jìn)行單元測(cè)試。本篇就首先介紹Yii2,以及Codeception的安裝。 二、Yii2和codeception安裝 安裝Yi...
摘要:前言忽然想起之前用時(shí)讓我膽戰(zhàn)心驚的那刻,那天我在測(cè)試服務(wù)器上研究著,忽然同事大叫,怎么用戶表被清空了,我當(dāng)時(shí)覺得跟自己沒關(guān),但想起我今天剛把的配置更改了,鏈接到了測(cè)試數(shù)據(jù)庫上,并且運(yùn)行過里面自帶的登陸案例,但運(yùn)行結(jié)果是失敗的,我覺得很有可能 前言 忽然想起之前用codecetion時(shí)讓我膽戰(zhàn)心驚的那刻,那天我在測(cè)試服務(wù)器上研究著codeception,忽然同事大叫,怎么用戶表被清空了,...
摘要:測(cè)試驅(qū)動(dòng)的安裝我就不寫了,這里有詳細(xì)說明。然后在命令提示符里執(zhí)行命令重構(gòu)一下記住測(cè)試驅(qū)動(dòng)里代碼發(fā)生改變都需要重構(gòu)一下不然會(huì)報(bào)錯(cuò)。在執(zhí)行命令進(jìn)行測(cè)試執(zhí)行了個(gè)測(cè)試驅(qū)動(dòng)個(gè)斷言全部成功以上只是我的一些經(jīng)驗(yàn)代碼不一定對(duì)希望對(duì)大家有幫助 測(cè)試驅(qū)動(dòng) codeception 的安裝我就不寫了,http://www.kkh86.com/it/codec... 這里有詳細(xì)說明。 我就說一下我的測(cè)試。 首先...
摘要:運(yùn)行來安裝指定的擴(kuò)展。這更便于用戶辨別是否是的擴(kuò)展。當(dāng)用戶運(yùn)行安裝一個(gè)擴(kuò)展時(shí),文件會(huì)被自動(dòng)更新使之包含新擴(kuò)展的信息。上述代碼表明該擴(kuò)展依賴于包。例如,上述的條目聲明將對(duì)應(yīng)于別名。為達(dá)到這個(gè)目的,你應(yīng)當(dāng)在公開發(fā)布前做測(cè)試。 簡(jiǎn)述 擴(kuò)展是專門設(shè)計(jì)的在 Yii 應(yīng)用中隨時(shí)可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴(kuò)展在你的應(yīng)用的每個(gè)頁面底部添加...
摘要:本文討論通過工具安裝框架并優(yōu)化過程中遇到的問題,約定讀者對(duì)基本原理有一定了解,并且有安裝框架的實(shí)際經(jīng)驗(yàn)。這個(gè)命令是優(yōu)化包的關(guān)鍵一環(huán)。命令要謹(jǐn)慎使用。 本文討論通過composer工具安裝Yii2框架并優(yōu)化Vendor過程中遇到的問題,約定讀者對(duì)composer基本原理有一定了解,并且有安裝Yii2框架的實(shí)際經(jīng)驗(yàn)。 在Yii2社區(qū)里經(jīng)常會(huì)遇到一類問題,那就是 安裝完官方推薦的版本后1 ...
閱讀 3043·2021-09-10 10:51
閱讀 2406·2021-09-02 15:21
閱讀 3367·2019-08-30 15:44
閱讀 1040·2019-08-29 18:34
閱讀 1810·2019-08-29 13:15
閱讀 3475·2019-08-26 11:37
閱讀 2840·2019-08-26 10:46
閱讀 1253·2019-08-26 10:26