PHP 單元測試與資料庫測試

2021-09-16 23:37:31 字數 2931 閱讀 1560

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

我個人也是 php,但同時我也比較討厭那些完事就算了的開發者,作為乙個開發者,或者說是乙個產品的經手人,就應該用心地去做好每個細節,一次比一次要更好。

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

屁話說太多了,那接下來簡單講講 phpunit 吧,官網。

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

$ composer require phpunit/phpunit -vvv
安裝完 phpunit,bin 執行指令碼會建立在vendor/bin目錄下,命名為phpunit, 執行php vendor/bin/phpunit執行測試指令碼

配置 bin 目錄:

}

配置 bin 目錄產生的目錄,執行php bin/phpunit指令碼開始測試。

phpunit可以配置在當前執行路徑新增乙個配置檔案phpunit.xml.dist或者phpunit.xml,內容如下:

dir1

dir2

可以通過配置目錄和初始化資訊,讓指令碼自動執行對應的測試用例。

使用 phpunit 建立我們的測試用例:

<?php

class demotest extends phpunit_framework_testcase

}

類名需要以 *test 結尾,繼承phpunit_framework_testcase。需要測試的方法需要一 test 開頭,表明是乙個測試方法。

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

更多的測試使用方法請看官網用例: phpunit

初始化當我們的測試物件繼承了 phpunit 後,初始化方法就需要使用它本身提供的 setup 方法,代表類初始化,可以在初始化方法中初始化一些資源,或者載入。

除了以上基礎的測試之外,關鍵一點應該在動態的資料,需要去測試嗎,如果需要,那應該怎麼去測試? 生產環境,也需要這樣測試? 這個曾經困惑這我的問題,已經解開。

解答:composer 中,有 --no-dev 選項,用來部署生產環境,避免測試環境的資料或者**跑在了生產環境下。並且生產環境上資料庫操作是沒有很高許可權的操作,要是有的話,你得回去面壁思考一下了。

dbunit 每次測試都重置資料,其實在生產環境下,就重置不了了,第乙個是composer --no-dev 已經沒有執行權利了,要是有,資料庫已經不允許清空操作了。

要是生產環境不需要這些東西,那麼應該怎麼測試。其實需要有乙個模擬生產環境的測試環境,去模擬生產環境測試,當所有測試都ok沒有問題,那麼就可以發布到生產環境上,要是嚴格一些,生產環境也是需要一輪測試。

$ composer require phpunit/dbunit -vvv
更多測試可看: 資料庫測試

<?php

class dbtest extends phpunit_extensions_database_testcase

/*** @return phpunit_extensions_database_dataset_idataset

*/public function getdataset()

}

getconnection方法是獲取資料庫連線,繼承資料庫測試後,必須實現的乙個方法,並且需要返回phpunit_extensions_database_db_idatabaseconnection物件,可以仿照上述寫法即可。

getdataset方法是資料集,在建立資料庫測試的時候,自動填充,測試,和刪除。他執行的流程是,每個測試用例,都會填充一次,以保證不會被其他測試用例影響。當當前測試用例測試完成後,會truncate掉填充的資料。

資料集支援挺多種方法,可以自定義陣列,yml,xml,可以根據自己的使用習慣,自定義填充資料。資料集可看: 點我

執行指令碼php vendor/bin/phpunit

然後去對應檢視自己的資料表,是否多了一些填充的資料呢?

抽象自己的資料庫測試類

在很多情況下,我們的業務可謂是各種各樣吧,倘若 phpunit 提供的資料庫測試還不能滿足或者不夠方便的時候,就需要擴充套件自己的資料庫測試,來達到自己想要的效果。

幸好,phpunit 提供了靈活的擴充套件操作(肯定啦,別人肯定不會像你這麼傻,寫死吧。哈哈),我們可以很容易地去實現自己的資料庫測試類。

<?php

$this->conn = $this->createdefaultdbconnection(self::$pdo, ':memory:');

}return $this->conn;

}}

至今為止,完成了最基礎和入門的單元測試和資料庫測試,最終資料庫無非就是檢視資料增刪改查是否和預期一樣。所以,配置完資料庫測試後,就可以走回第一步,編寫你的測試用例,斷言測試了。

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

JUnit 資料庫單元測試 《五》

注 這個要提前說一下呼叫程式中方法測試資料庫的時候會出現的問題,測試資料庫增刪查改,插入資料和更改資料的時候,需要注意到不能存在資料殘留。或者造成資料庫的破壞,影響資料庫的真實資料或實驗資料。解決辦法 1 可以建立資料庫副本 junit只是驗證資料庫操作 是否正確 2 使用dbunit也是可以解決這...

PHP單元測試使用

php與其他語言不太一樣,單元測試需要自己安裝和配置,相對麻煩一點,不過單元測試對於提高庫的穩定性和健壯性還是非常給力的,下面教大家怎麼配置php單元測試 注意 php需公升級到7.1版本以上 wget chmod x phpunit 7.0.phar sudo mv phpunit 7.0.pha...

單元測試 單元測試文章收藏

前言 前段時間公司計畫做自動化測試,自己也打算圍繞幾個點做相關調研,現在想想呢?其實對自動化測試的概念都還不是十分清晰,當時主要還是圍繞 單元測試 向qa小夥伴學習了一段時間,現由於公司重組,學習中斷,這裡簡單記錄一些單元測試好文,留待後續參考.什麼叫自動化測試?自動化測試覆蓋率?覆蓋率如何做到的?...