這篇文章主要介紹了php單元測試phpunit,結合實例形式分析了php單元測試phpunit的基本概念、使用方法及相關注意事項,需要的朋友可以參考下
#具體如下:
何為單元測試:
指對軟體中的基本單元進行測試,如函數、方法等,以檢查其傳回值或行為是否符合預期;實際中軟體是很複雜的,由許多組件構成,執行流程連貫在一起,要進行單元片段的測試,就需要為其提供執行上下文(或者說參數)和環境(比如打樁模擬一些對象)來運行,並監控其行為和回傳值,為此我們需要寫出做這件事的程式碼,這樣的程式碼叫做測試案例,許多測試案例有機結合在一起形成一個整體的測試,又叫做測試套件,被測試的程式碼叫做生產代碼。 phpunit這個軟體就是用來幫助我們寫測試案例並進行測試的。
php的單元測試:phpunit
在其官網有詳細教程,這裡介紹一些補充內容。
首先要明白phpunit軟體本身就是由php語言實現,其使用是透過命令列進行的,並不是透過瀏覽器存取
明白這一點很重要,許多新人被卡在這裡。很基礎也很簡單,但似乎沒怎麼被提及
在官網下載後得到一個phar文件,關於phar歸檔文件的介紹可參見前面一篇文章PHP開發之歸檔格式phar文件概念與用法
請同時下載phpunit使用文檔,按照裡面的安裝方法進行安裝,之後在命令列輸入以下命令:
phpunit --help
如果顯示出了幫助資訊即安裝成功,在命令列目前目錄下建立一個測試案例為yunke.php,內容如下:
<?php use PHPUnit\Framework\TestCase; class yunkeTest extends TestCase { public function testPushAndPop() { $stack = []; $this->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)); } } ?>
然後在命令列輸入以下指令:
phpunit yunke
顯示以下內容:
PHPUnit 5.7.12 by Sebastian Bergmann and contributors. . 1 / 1 (100%) Time: 159 ms, Memory: 7.00MB OK (1 test, 5 assertions)
恭喜,你已經成功運行了一個單元測試,第一行是作者信息(Sebastian Bergmann這個傢伙很喜歡署名啊)
第二行以一個句點開始,表示所有測試成功通過
你可能會疑惑,上面的php程式碼是怎麼回事呢?
那就是一個測試案例,簡單的測試了一個陣列操作,進行單元測試一般通過以下四個步驟:
1. 針對生產程式碼類別 Class 的測試寫在類別 ClassTest中。
2. ClassTest(通常)繼承自 PHPUnit\Framework\TestCase。
3. 測試都是命名為 test* 的公用方法。也可以在方法的文檔註解區塊(docblock)中使用 @test
標註將其標記為測試方法。
4. 在測試方法內,類似於 assertEquals()
這樣的斷言方法用來對實際值與預期值的匹配做出斷言判斷。
這裡你可能會有幾個地方迷惑:
1、在註解區塊中使用的標註,php可以透過反射得到,程式可以利用得到的資訊進行配置
2 、上列測試用例程式碼裡面的TestCase類別來自哪裡?並沒有被載入啊?
上文提到phpunit本身是用php語言寫成的,打包成了phar供使用,phar是可執行的,執行時首先執行包裡面的存根文件stub
你可以按照上文雲端客的另外一篇phar貼文介紹的方法提取還原phpunit.phar包,或者使用phpstorm這樣的ide直接打開
在.phar/stub.php裡你將看到存根程式碼,TestCase類別就是在存根程式碼裡面require的「phpunit yunke」這條命令列程式碼會先執行phpunit腳本,從存根檔案開始執行,然後由phpunit載入測試案例程式碼
#可以看出程式並不是從測試案例腳本開始執行的,現在明白TestCase類別哪裡來的了吧
#相關推薦:
#
以上是php單元測試phpunit的方法及實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

本文比較了PHP和ASP.NET,重點是它們對大規模Web應用程序,性能差異和安全功能的適用性。兩者對於大型項目都是可行的,但是PHP是開源和無關的,而ASP.NET,


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)