摘要:但是,我們沒有忘記,這個測試用例本意是要對這個類做單元測試的。三對指定的類進行單元測試首先我的的類如下我們要在中去對上述的類做測試,第一步做的就是要能加載到該類。
一、生成測試文件
比如說我的models有一個需要測試得AdminUser類,我需要生成相應得測試文件,那么我們可以使用下面得命令生成相應得測試文件
vendorincodecept generate:test unit modelsAdiminUser
執行結果如下
我們生成的測試用例是這個樣子的(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() { } }
現在我們來修改這個文件,使它能完成簡單的處理。這里的assertTrue方法,是用來做真假斷言用的。當然還有很多其他種類的斷言,如:assertInternalType;assertEquals;assertInstanceOf……可以查看更多斷言詳細
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); } //這個是明顯錯誤 public function testFunction2() { $this->assertTrue(3 < 1); } }
現在我們可以使用命令執行我們的測試用例了:
vendorincodecept run unit modelsAdiminUserTest
執行結果如下所示(3個成功,1個失敗),testFunction2有明顯錯誤,改正以后會沒有失敗數量的
好了現在我們已經學會了簡單的斷言。但是,我們沒有忘記,這個測試用例本意是要對AdminUser這個model類做單元測試的。接下來我們要真正的步入正題了。
三、對指定的類進行單元測試首先我的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中去對上述的類做測試,第一步做的就是要能加載到該類。我們知道,現在大部分框架都是使用psr-4規則的/vendor/autoload.php來完成自動加載的,當然yii2和它的codeception也是一樣的。這邊是多說了一些,等我們后續遇到這個問題了,再詳細說。
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: 假設為true
expect_not: 假設為false
和我們用assertFalse和assertTrue意義是一樣的
好了,我們來執行命令吧。看看現在的會不會如我們設想的一般。
vendorincodecept run unit modelsAdiminUserTest
4個測試方法,12個斷言都沒有問題,執行成功。
總結,至此我們的小小目標基本達成,生成測試文件,測試相關單元的目標基本都可以完成了。當然,我們還是有一些問題亟待解決的,比如說,我們用來測試的數據還是models的靜態變量(不夠真實);我們有100個model類難道要一個個手動生成測試類;如果我們項目文件結構有所改變的話也會會遇到一些問題。不過沒關系,我們再接下來的幾篇文章里會介紹相關的內容。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31987.html
摘要:一簡介作為工程師,我們很可能遇到一些有必要的進行單元測試的場景。本系列文章就來介紹下,在框架下,如何使用進行單元測試。 一、簡介 作為php工程師,我們很可能遇到一些有必要的進行單元測試的場景。本系列文章就來介紹下,在Yii2框架下,如何使用Codeception進行單元測試。本篇就首先介紹Yii2,以及Codeception的安裝。 二、Yii2和codeception安裝 安裝Yi...
摘要:前言忽然想起之前用時讓我膽戰心驚的那刻,那天我在測試服務器上研究著,忽然同事大叫,怎么用戶表被清空了,我當時覺得跟自己沒關,但想起我今天剛把的配置更改了,鏈接到了測試數據庫上,并且運行過里面自帶的登陸案例,但運行結果是失敗的,我覺得很有可能 前言 忽然想起之前用codecetion時讓我膽戰心驚的那刻,那天我在測試服務器上研究著codeception,忽然同事大叫,怎么用戶表被清空了,...
摘要:測試驅動的安裝我就不寫了,這里有詳細說明。然后在命令提示符里執行命令重構一下記住測試驅動里代碼發生改變都需要重構一下不然會報錯。在執行命令進行測試執行了個測試驅動個斷言全部成功以上只是我的一些經驗代碼不一定對希望對大家有幫助 測試驅動 codeception 的安裝我就不寫了,http://www.kkh86.com/it/codec... 這里有詳細說明。 我就說一下我的測試。 首先...
摘要:運行來安裝指定的擴展。這更便于用戶辨別是否是的擴展。當用戶運行安裝一個擴展時,文件會被自動更新使之包含新擴展的信息。上述代碼表明該擴展依賴于包。例如,上述的條目聲明將對應于別名。為達到這個目的,你應當在公開發布前做測試。 簡述 擴展是專門設計的在 Yii 應用中隨時可拿來使用的, 并可重發布的軟件包。 基礎 例如, yiisoft/yii2-debug 擴展在你的應用的每個頁面底部添加...
摘要:本文討論通過工具安裝框架并優化過程中遇到的問題,約定讀者對基本原理有一定了解,并且有安裝框架的實際經驗。這個命令是優化包的關鍵一環。命令要謹慎使用。 本文討論通過composer工具安裝Yii2框架并優化Vendor過程中遇到的問題,約定讀者對composer基本原理有一定了解,并且有安裝Yii2框架的實際經驗。 在Yii2社區里經常會遇到一類問題,那就是 安裝完官方推薦的版本后1 ...
閱讀 2846·2021-09-10 10:51
閱讀 2214·2021-09-02 15:21
閱讀 3205·2019-08-30 15:44
閱讀 868·2019-08-29 18:34
閱讀 1651·2019-08-29 13:15
閱讀 3321·2019-08-26 11:37
閱讀 2696·2019-08-26 10:46
閱讀 1106·2019-08-26 10:26