成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Codeception進(jìn)行Yii2的單元測試(二)測試用例(測試model類為例)

chenjiang3 / 3139人閱讀

摘要:但是,我們沒有忘記,這個測試用例本意是要對這個類做單元測試的。三對指定的類進(jìn)行單元測試首先我的的類如下我們要在中去對上述的類做測試,第一步做的就是要能加載到該類。

一、生成測試文件

比如說我的models有一個需要測試得AdminUser類,我需要生成相應(yīng)得測試文件,那么我們可以使用下面得命令生成相應(yīng)得測試文件

vendorincodecept generate:test unit modelsAdiminUser

執(zhí)行結(jié)果如下

二、測試用例的編寫

我們生成的測試用例是這個樣子的(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)在我們來修改這個文件,使它能完成簡單的處理。這里的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);
    }
    //這個是明顯錯誤
    public function testFunction2()
    {
        $this->assertTrue(3 < 1);
    }

}

現(xiàn)在我們可以使用命令執(zhí)行我們的測試用例了:

vendorincodecept run unit modelsAdiminUserTest

執(zhí)行結(jié)果如下所示(3個成功,1個失?。瑃estFunction2有明顯錯誤,改正以后會沒有失敗數(shù)量的

好了現(xiàn)在我們已經(jīng)學(xué)會了簡單的斷言。但是,我們沒有忘記,這個測試用例本意是要對AdminUser這個model類做單元測試的。接下來我們要真正的步入正題了。

三、對指定的類進(jìn)行單元測試

首先我的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中去對上述的類做測試,第一步做的就是要能加載到該類。我們知道,現(xiàn)在大部分框架都是使用psr-4規(guī)則的/vendor/autoload.php來完成自動加載的,當(dāng)然yii2和它的codeception也是一樣的。這邊是多說了一些,等我們后續(xù)遇到這個問題了,再詳細(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)在的會不會如我們設(shè)想的一般。

vendorincodecept run unit modelsAdiminUserTest

4個測試方法,12個斷言都沒有問題,執(zhí)行成功。

總結(jié),至此我們的小小目標(biāo)基本達(dá)成,生成測試文件,測試相關(guān)單元的目標(biāo)基本都可以完成了。當(dāng)然,我們還是有一些問題亟待解決的,比如說,我們用來測試的數(shù)據(jù)還是models的靜態(tài)變量(不夠真實);我們有100個model類難道要一個個手動生成測試類;如果我們項目文件結(jié)構(gòu)有所改變的話也會會遇到一些問題。不過沒關(guān)系,我們再接下來的幾篇文章里會介紹相關(guān)的內(nèi)容。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31987.html

相關(guān)文章

  • 使用Codeception進(jìn)行Yii2單元測試(一)安裝以及簡介篇

    摘要:一簡介作為工程師,我們很可能遇到一些有必要的進(jìn)行單元測試的場景。本系列文章就來介紹下,在框架下,如何使用進(jìn)行單元測試。 一、簡介 作為php工程師,我們很可能遇到一些有必要的進(jìn)行單元測試的場景。本系列文章就來介紹下,在Yii2框架下,如何使用Codeception進(jìn)行單元測試。本篇就首先介紹Yii2,以及Codeception的安裝。 二、Yii2和codeception安裝 安裝Yi...

    dabai 評論0 收藏0
  • codeception (7) 危險Yii2-codeception

    摘要:前言忽然想起之前用時讓我膽戰(zhàn)心驚的那刻,那天我在測試服務(wù)器上研究著,忽然同事大叫,怎么用戶表被清空了,我當(dāng)時覺得跟自己沒關(guān),但想起我今天剛把的配置更改了,鏈接到了測試數(shù)據(jù)庫上,并且運行過里面自帶的登陸案例,但運行結(jié)果是失敗的,我覺得很有可能 前言 忽然想起之前用codecetion時讓我膽戰(zhàn)心驚的那刻,那天我在測試服務(wù)器上研究著codeception,忽然同事大叫,怎么用戶表被清空了,...

    ZHAO_ 評論0 收藏0
  • YII2.0 codeception 一點經(jīng)驗

    摘要:測試驅(qū)動的安裝我就不寫了,這里有詳細(xì)說明。然后在命令提示符里執(zhí)行命令重構(gòu)一下記住測試驅(qū)動里代碼發(fā)生改變都需要重構(gòu)一下不然會報錯。在執(zhí)行命令進(jìn)行測試執(zhí)行了個測試驅(qū)動個斷言全部成功以上只是我的一些經(jīng)驗代碼不一定對希望對大家有幫助 測試驅(qū)動 codeception 的安裝我就不寫了,http://www.kkh86.com/it/codec... 這里有詳細(xì)說明。 我就說一下我的測試。 首先...

    chaosx110 評論0 收藏0
  • Yii修行之路 - Extension 擴(kuò)展

    摘要:運行來安裝指定的擴(kuò)展。這更便于用戶辨別是否是的擴(kuò)展。當(dāng)用戶運行安裝一個擴(kuò)展時,文件會被自動更新使之包含新擴(kuò)展的信息。上述代碼表明該擴(kuò)展依賴于包。例如,上述的條目聲明將對應(yīng)于別名。為達(dá)到這個目的,你應(yīng)當(dāng)在公開發(fā)布前做測試。 簡述 擴(kuò)展是專門設(shè)計的在 Yii 應(yīng)用中隨時可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴(kuò)展在你的應(yīng)用的每個頁面底部添加...

    bovenson 評論0 收藏0
  • YII2通過composer優(yōu)化vendor

    摘要:本文討論通過工具安裝框架并優(yōu)化過程中遇到的問題,約定讀者對基本原理有一定了解,并且有安裝框架的實際經(jīng)驗。這個命令是優(yōu)化包的關(guān)鍵一環(huán)。命令要謹(jǐn)慎使用。 本文討論通過composer工具安裝Yii2框架并優(yōu)化Vendor過程中遇到的問題,約定讀者對composer基本原理有一定了解,并且有安裝Yii2框架的實際經(jīng)驗。 在Yii2社區(qū)里經(jīng)常會遇到一類問題,那就是 安裝完官方推薦的版本后1 ...

    dcr309duan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<