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

資訊專欄INFORMATION COLUMN

PHP 單元測試與數(shù)據(jù)庫測試

hersion / 787人閱讀

摘要:只實例化一次,供測試的清理和裝載基境使用對于每個測試,只實例化一次至今為止,完成了最基礎和入門的單元測試和數(shù)據(jù)庫測試,最終數(shù)據(jù)庫無非就是查看數(shù)據(jù)增刪改查是否和預期一樣。恭喜你,你已經(jīng)構建完自己的單元測試環(huán)境了。

我總感覺 PHP 的開發(fā)者們并沒有對 PHP 的質(zhì)量有所追求,可能是因為 PHP 的機制問題吧,讓大部分的開發(fā)者總以為瀏覽器訪問就沒有問題,所以很多時候,做 PHP 開發(fā)的,就沒有單元測試的這些概念了。能不能有點追求?

我個人也是 PHP,但同時我也比較討厭那些完事就算了的開發(fā)者,作為一個開發(fā)者,或者說是一個產(chǎn)品的經(jīng)手人,就應該用心地去做好每個細節(jié),一次比一次要更好。

但是做單元測試,質(zhì)量檢查,是需要一定的時間和人力投入的,但我敢保證地說,你花時間投入的,絕對不會是沒用的,一定對你,對項目來說,是一個質(zhì)的提升,只要你肯投入時間用心去做。

屁話說太多了,那接下來簡單講講 phpunit 吧,官網(wǎng)。

因為我們習慣用 composer,所以我們也使用 composer 安裝吧。

安裝與配置
$ composer require phpunit/phpunit -vvv 

安裝完 phpunit,bin 執(zhí)行腳本會創(chuàng)建在 vendor/bin 目錄下,命名為 phpunit, 執(zhí)行 php vendor/bin/phpunit 執(zhí)行測試腳本

配置 bin 目錄:

{
  "config": {
    "bin": "bin"
  }
}

配置 bin 目錄產(chǎn)生的目錄,執(zhí)行 php bin/phpunit 腳本開始測試。

phpunit 可以配置在當前執(zhí)行路徑添加一個配置文件 phpunit.xml.dist 或者 phpunit.xml,內(nèi)容如下:


    
        
            dir1
        
        
            dir2
        
    

可以通過配置目錄和初始化信息,讓腳本自動執(zhí)行對應的測試用例。

基礎使用

使用 PHPUnit 創(chuàng)建我們的測試用例:

assertEquals(0, count($stack));
    
            array_push($stack, "foo");
            $this->assertEquals("foo", $stack[count($stack)-1]);
            $this->assertEquals(1, count($stack));
    
            $this->assertEquals("foo", array_pop($stack));
            $this->assertEquals(0, count($stack));
        }
}

類名需要以 *Test 結(jié)尾,繼承 PHPUnit_Framework_TestCase。需要測試的方法需要一 test 開頭,表明是一個測試方法。

一般常用測試無非就是 "斷言",說白了,就是看看產(chǎn)生的結(jié)果是不是符合預期,如果是,那就證明,已經(jīng)測試通過,否則,失敗,說明邏輯處理,存在一定的差異,導致不符合預期。

更多的測試使用方法請看官網(wǎng)用例: PHPUnit

初始化

當我們的測試對象繼承了 PHPUnit 后,初始化方法就需要使用它本身提供的 setUp 方法,代表類初始化,可以在初始化方法中初始化一些資源,或者加載。

數(shù)據(jù)庫測試

除了以上基礎的測試之外,關鍵一點應該在動態(tài)的數(shù)據(jù),需要去測試嗎,如果需要,那應該怎么去測試? 生產(chǎn)環(huán)境,也需要這樣測試? 這個曾經(jīng)困惑這我的問題,已經(jīng)解開。

解答:

composer 中,有 --no-dev 選項,用來部署生產(chǎn)環(huán)境,避免測試環(huán)境的數(shù)據(jù)或者代碼跑在了生產(chǎn)環(huán)境下。并且生產(chǎn)環(huán)境上數(shù)據(jù)庫操作是沒有很高權限的操作,要是有的話,你得回去面壁思考一下了。

dbunit 每次測試都重置數(shù)據(jù),其實在生產(chǎn)環(huán)境下,就重置不了了,第一個是composer --no-dev 已經(jīng)沒有執(zhí)行權利了,要是有,數(shù)據(jù)庫已經(jīng)不允許清空操作了。

要是生產(chǎn)環(huán)境不需要這些東西,那么應該怎么測試。其實需要有一個模擬生產(chǎn)環(huán)境的測試環(huán)境,去模擬生產(chǎn)環(huán)境測試,當所有測試都OK沒有問題,那么就可以發(fā)布到生產(chǎn)環(huán)境上,要是嚴格一些,生產(chǎn)環(huán)境也是需要一輪測試。

$ composer require phpunit/dbunit -vvv 

更多測試可看: 數(shù)據(jù)庫測試

createDefaultDBConnection($pdo, ":memory:");
    }

    /**
     * @return PHPUnit_Extensions_Database_DataSet_IDataSet
     */
    public function getDataSet()
    {
        return $this->createFlatXMLDataSet(dirname(__FILE__)."/_files/guestbook-seed.xml");
    }
}

getConnection 方法是獲取數(shù)據(jù)庫連接,繼承數(shù)據(jù)庫測試后,必須實現(xiàn)的一個方法,并且需要返回 PHPUnit_Extensions_Database_DB_IDatabaseConnection 對象,可以仿照上述寫法即可。

getDataSet 方法是數(shù)據(jù)集,在創(chuàng)建數(shù)據(jù)庫測試的時候,自動填充,測試,和刪除。他執(zhí)行的流程是,每個測試用例,都會填充一次,以保證不會被其他測試用例影響。當當前測試用例測試完成后,會 truncate 掉填充的數(shù)據(jù)。

數(shù)據(jù)集支持挺多種方法,可以自定義數(shù)組,yml,xml,可以根據(jù)自己的使用習慣,自定義填充數(shù)據(jù)。數(shù)據(jù)集可看: 點我

執(zhí)行腳本 php vendor/bin/phpunit

然后去對應查看自己的數(shù)據(jù)表,是否多了一些填充的數(shù)據(jù)呢?

抽象自己的數(shù)據(jù)庫測試類

在很多情況下,我們的業(yè)務可謂是各種各樣吧,倘若 phpunit 提供的數(shù)據(jù)庫測試還不能滿足或者不夠方便的時候,就需要擴展自己的數(shù)據(jù)庫測試,來達到自己想要的效果。

幸好,phpunit 提供了靈活的擴展操作(肯定啦,別人肯定不會像你這么傻,寫死吧。哈哈),我們可以很容易地去實現(xiàn)自己的數(shù)據(jù)庫測試類。

conn === null) {
            if (self::$pdo == null) {
                self::$pdo = new PDO("mysql::dbname=test;host=127.0.0.1", "user", "pass");
            }
            $this->conn = $this->createDefaultDBConnection(self::$pdo, ":memory:");
        }

        return $this->conn;
    }
}

至今為止,完成了最基礎和入門的單元測試和數(shù)據(jù)庫測試,最終數(shù)據(jù)庫無非就是查看數(shù)據(jù)增刪改查是否和預期一樣。所以,配置完數(shù)據(jù)庫測試后,就可以走回第一步,編寫你的測試用例,斷言測試了。

恭喜你,你已經(jīng)構建完自己的單元測試環(huán)境了。接下來需要做的是,提高易用性,測試覆蓋率。我只能幫你到這里了,接下來的路,自己走吧。

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

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

相關文章

  • PHPUnit實踐一(初識)

    摘要:另外一些單元測試可能會測試負向路徑的場景,保證代碼不僅會產(chǎn)生錯誤,而且是預期的錯誤。是一個面向程序員的測試框架,這是一個的體系結(jié)構的單元測試框架。 本系列教程所有的PHPUnit測試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測試: 代碼直接echo,debug等方法測試 -> 跟蹤細節(jié)斷點型測試 log日志輔助測試 -> 跟蹤細節(jié)斷點型測試 ...

    weapon 評論0 收藏0
  • PHPUnit實踐一(初識)

    摘要:另外一些單元測試可能會測試負向路徑的場景,保證代碼不僅會產(chǎn)生錯誤,而且是預期的錯誤。是一個面向程序員的測試框架,這是一個的體系結(jié)構的單元測試框架。 本系列教程所有的PHPUnit測試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測試: 代碼直接echo,debug等方法測試 -> 跟蹤細節(jié)斷點型測試 log日志輔助測試 -> 跟蹤細節(jié)斷點型測試 ...

    hss01248 評論0 收藏0
  • 使用樁件 (Stub) 解決 Laravel 單元測試中的依賴

    摘要:可是我們在做單元測試的時候,希望盡可能少的產(chǎn)生依賴。后記任何一個可靠的系統(tǒng),單元測試都是必不可少的。慶幸的是,幫我們提供了好用的單元測試。 本文是我在實踐后的一點總結(jié),難免有不妥之處。如有幸得大神路過,還望不吝賜教,小弟在此謝過了! 很早就知道有單元測試的概念,也曾嘗試過,但是一直對單元測試的概念和方法,比較模糊。在聽了 @vimac 大神的講堂 PHP單元測試與測試驅(qū)動開發(fā) 后,慢慢...

    Miyang 評論0 收藏0
  • 寫一個“特殊”的查詢構造器 - (八、單元測試、收尾工作)

    摘要:單元測試的好處是給開發(fā)人員的,并不是給機器的。對于查詢構造器這個項目,我們可以讓其在遠程運行環(huán)境安裝相關數(shù)據(jù)庫軟件,執(zhí)行數(shù)據(jù)表建立,數(shù)據(jù)導入,執(zhí)行單元測試等操作。查詢構造器的完整代碼查詢構造器的單元測試完整代碼。 debug 模式 對查詢構造器進行調(diào)試并不難,從其構造 SQL -> 數(shù)據(jù)綁定 -> SQL 執(zhí)行的過程中就能發(fā)現(xiàn),要方便調(diào)試,只要可以觀察以下信息: 構造的 SQL 綁定...

    Steve_Wang_ 評論0 收藏0
  • PHP 單元測試

    摘要:上面的規(guī)定是必須遵守的,如果代碼沒有遵守規(guī)定不會把他當做單元測試代碼。每個單元測試類以被測試的類名開頭。每個單元測試函數(shù)應該為被測試函數(shù)名結(jié)尾。函數(shù)可能在測試環(huán)境不可執(zhí)行,那么無法獲取的執(zhí)行結(jié)果,從而無法對進行單元測試。 本文首發(fā)于 https://jaychen.cc/article/34作者 Jaychen showImg(https://segmentfault.com/img/...

    娣辯孩 評論0 收藏0

發(fā)表評論

0條評論

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