成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PHP單元測試與數據庫測試

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

[[187830]]

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

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

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

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

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

安裝與配置 

  1. $ composer require phpunit/phpunit -vvv 

安裝完 phpunit,bin 執行腳本會創建在 vendor/bin 目錄下,命名為 phpunit, 執行 php vendor/bin/phpunit 執行測試腳本

配置 bin 目錄:

  1.  
  2.   "config": { 
  3.  
  4.     "bin""bin" 
  5.  
  6.  } 
  7.  
  8.  

配置 bin 目錄產生的目錄,執行 php bin/phpunit 腳本開始測試。

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

  1. <phpunit 
  2.          colors="true" 
  3.          bootstrap="./vendor/autoload.php" 
  4.         > 
  5.     <testsuites> 
  6.         <testsuite> 
  7.             <directory>dir1</directory> 
  8.         </testsuite> 
  9.         <testsuite> 
  10.             <directory>dir2</directory> 
  11.         </testsuite> 
  12.     </testsuites> 
  13. </phpunit>  

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

基礎使用

使用 PHPUnit 創建我們的測試用例:

  1. <?php 
  2.  
  3. class DemoTest extends PHPUnit_Framework_TestCase 
  4.      public function testPushAndPop() 
  5.         { 
  6.             $stack = []; 
  7.             $this->assertEquals(0, count($stack)); 
  8.      
  9.             array_push($stack, 'foo'); 
  10.             $this->assertEquals('foo', $stack[count($stack)-1]); 
  11.             $this->assertEquals(1, count($stack)); 
  12.      
  13.             $this->assertEquals('foo', array_pop($stack)); 
  14.             $this->assertEquals(0, count($stack)); 
  15.         } 
  16.  

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

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

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

初始化

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

數據庫測試

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

解答:

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

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

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

  1. $ composer require phpunit/dbunit -vvv 

更多測試可看: 數據庫測試

  1. <?php 
  2. class DBTest extends PHPUnit_Extensions_Database_TestCase 
  3.     /** 
  4.      * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection 
  5.      */ 
  6.     public function getConnection() 
  7.     { 
  8.         $pdo = new PDO('mysql::dbname=test;host=127.0.0.1''user''pass'); 
  9.         return $this->createDefaultDBConnection($pdo, ':memory:'); 
  10.     } 
  11.  
  12.     /** 
  13.      * @return PHPUnit_Extensions_Database_DataSet_IDataSet 
  14.      */ 
  15.     public function getDataSet() 
  16.     { 
  17.         return $this->createFlatXMLDataSet(dirname(__FILE__).'/_files/guestbook-seed.xml'); 
  18.     } 
  19.  

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

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

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

執行腳本 php vendor/bin/phpunit

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

抽象自己的數據庫測試類

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

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

  1. <?php 
  2.  
  3. abstract class MyApp_Tests_DatabaseTestCase extends PHPUnit_Extensions_Database_TestCase 
  4.     // 只實例化 pdo 一次,供測試的清理和裝載基境使用 
  5.     static private $pdo = null
  6.  
  7.     // 對于每個測試,只實例化 PHPUnit_Extensions_Database_DB_IDatabaseConnection 一次 
  8.     private $conn = null
  9.  
  10.     final public function getConnection() 
  11.     { 
  12.         if ($this->conn === null) { 
  13.             if (self::$pdo == null) { 
  14.                 self::$pdo = new PDO('mysql::dbname=test;host=127.0.0.1''user''pass'); 
  15.             } 
  16.             $this->conn = $this->createDefaultDBConnection(self::$pdo, ':memory:'); 
  17.         } 
  18.  
  19.         return $this->conn; 
  20.     } 
  21.  

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

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

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2017-01-14 23:42:49

單元測試框架軟件測試

2011-01-25 10:42:29

Visual Stud

2011-02-15 10:05:48

PHPPHPUnit

2021-08-04 10:51:04

數據庫單元測試SQL

2009-09-01 10:20:06

protected方法單元測試

2020-08-18 08:10:02

單元測試Java

2011-02-16 09:45:13

PHPPHPUnit

2017-02-21 10:30:17

Android單元測試研究與實踐

2017-01-14 23:26:17

單元測試JUnit測試

2017-01-16 12:12:29

單元測試JUnit

2011-05-16 16:52:09

單元測試徹底測試

2011-02-21 09:54:14

PHPPHPUnit

2023-07-28 10:27:48

Java單元測試

2023-07-26 08:58:45

Golang單元測試

2011-07-04 18:16:42

單元測試

2020-05-07 17:30:49

開發iOS技術

2021-05-05 11:38:40

TestNGPowerMock單元測試

2017-03-23 16:02:10

Mock技術單元測試

2020-07-07 07:33:12

Java單元集成

2024-10-16 16:09:32

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 999热精品视频 | 欧美黑人一级爽快片淫片高清 | 激情福利视频 | 亚洲视频在线播放 | 国产精品自拍视频 | 国产欧美日韩综合精品一区二区 | 欧美一级淫片免费视频黄 | 日日天天 | 日韩久久久久久久久久久 | 亚洲精品99 | 国产在线中文字幕 | 一区二区av | 国产精品亚洲一区二区三区在线 | 国产乱码精品一区二区三区忘忧草 | 精品欧美色视频网站在线观看 | 久久精品色欧美aⅴ一区二区 | 视频在线一区二区 | 黄色一级大片在线观看 | 嫩草视频在线 | 麻豆精品国产91久久久久久 | 精品国产免费人成在线观看 | 三级免费 | 色接久久 | 一区二区亚洲 | 日韩精品激情 | 国产视频精品视频 | www.亚洲国产精品 | 日韩一区二区在线观看 | 久久久新视频 | 久草在线在线精品观看 | 亚洲精品电影在线观看 | 一区二区av| 国产精品视频一区二区三区不卡 | av毛片 | 久久成人一区 | 伊人久久综合 | 欧美一区二区三区在线看 | 99re在线播放| 成人国产免费观看 | 日本不卡一区 | 91久久精品日日躁夜夜躁国产 |