色色寫的簡易php單元測試框架的簡單介紹

本文目錄一覽:

php單元測試怎麼寫

寫過JAVA和C++的單元測試,PHP,沒必要也沒寫過。單元測試主要是對核心的類和方法進行測試,在J2EE開發中,由於各種配置比較繁瑣,並且是分層開發,所以很有必要寫單元測試。比如,我做了一個service,我就可以針對這個service寫個單元測試,取出這個bean,來驗證是否正常,而不必等到ACTION層寫好後,配置完整再來測試。對J2EE來說,service正常後,ACTION我就不用管了。做單元測試也容易提早發現問題。並且eclipse自帶了iunit,使用極其方便。C++也一樣,流程比較複雜,為了儘快驗證和發現問題,有做單元測試的必要。而PHP這類腳本,不需要。我也很少見人提到過php的單元測試。本身邏輯就不複雜,而且大多數也不分層。NETBEAN自帶了phpunit,不過從沒用過如果還有不明白的話,你可以在後盾人看看視頻找找答案,有空多看看時間長了,慢慢就明白了,希望能幫到你,給個採納吧謝謝グッ!(๑•̀ㅂ•́)و✧

PHP 微型框架有什麼好的推薦嗎

1. Cake PHP

\

CakePHP是一個擁有極大靈活性的開發,維護和部署的快速開發框架。使用非常常見的MVC和ORM設計模式,及其配置規則幫助大家簡化開發過程而無須開發過多的代碼

和ZF類似,CakePHP不要求配置。使用簡單。在IRC上擁有非常友好的社區#cakePHP,用來幫助新的用戶快速開始學習。基於MIT License,擁有最佳實踐,例如,安全,認證和session處理。擁有面對對象的方式幫助你更簡單的使用。

源代碼

2. Yii Framework

\

Yii是一個免費,開源的web應用開發框架,使用PHP5開發,幫助開發乾淨,簡潔的設計並且鼓勵開發開發。它幫助流水化的開發應用,並且保證高效,可擴展和易維護。性能極大的優化,非常適合開發任何類型的產品和項目。然而,它內建複雜,企業級別的應用。你擁有完整的控制,包括表現層和持久層,符合了企業級別開發的指導方針

源代碼

3. Zend

\

Zend Framework 2 是一個使用PHP5.3+來開發web應用和服務的開源框架。使用100%的面對對象的代碼並且使用PHP5.3種的新特性,例如名字空間,late static binding,lamda function和closure。Zend framewok 2 由成功的PHP框架Zend Framework 1演變而來,而Zend framework 1擁有1500萬的下載量。Zend framework2擁有獨特的組件結構,每一個組件都設計的盡量少和其它組件產生依賴關係。 ZF2遵循了嚴格的面對對象的設計原理。這種非嚴格的組件關係結構允許開發人員使用任何他想使用的組件。

源代碼

4. Symfony

\

Smyfony是一個web應用框架,遵循了典型的MVC(model view controller)的設計結構,現在越來越受歡迎,Symfony基於MIT license,它使用一些PHP代碼類的輔助類庫得開發的過程簡單

源代碼

5. Webasyst

\

webasyst是一個開源的PHP框架用來開發平滑的多用戶web應用或者複雜的網站。和其它的框架,例如,zend和symfony,比較起來,Webasyst框架更專註,並且允許更快和更高效的創建基於商業和團隊使用的應用。這個框架提供了大量的現成的工具用來管理用戶和授權,UI創建,移動端的訪問等等

源代碼

6. Laravel

\

Laravle是一個定位於優雅簡單的PHP框架。變成不會變的苦悶。事實上,使用正確的工具絕對是讓它成為一個讓人愉悅的事情。Laravel適合所有的PHP開發人員,特別是初學者。除了完善的文章,Laravel的友好的社區一直幫助回答文檔上沒有涉及到的相關問題。使用Bundle來打包和分享代碼絕對是一個非常棒的方式

源代碼

7. Guzzle

\

Guzzle是一個幫助大家解決發送HTTP請求和創建web service 客戶端中多餘的步驟的框架。包含了用來創建強壯的web service客戶端的工具,其中: 定義輸入和輸出的服務描述API,用來遍歷分頁資源的資源迭代,高效發送大量請求等等。

源代碼

8. Phalcon PHP

\

Phalcon PHP是一個被發布成為C擴展並且提供高性能和低資源消耗的web框架。使用C書寫,平台無關。作為這樣的框架,PHP支持微軟的windows系統, GNU/linux,Max OSX,你可以下載一個適合你的系統的二進位包或者自己編譯

源代碼

9. CodeIgniter

\

Codelgiter是一個強大的PHP框架,擁有非常小的體積,針對需要使用簡單優雅的工具套件開發完整特性的web應用而開發。如果你需要處理共享主機賬號或者客戶時間有限制,並且厭倦了沒有文檔的大型框架的話,Codeignier可能非常適合你

源代碼

10. Fuel PHP

\

Fuel是一個簡單,靈活,社區驅動的PHP5.3 web框架,基於其它框架中的好的想法而開發一個框架。在Apache,,IIS和Nginx上測試過。Fuel使用另外一種方式實現,和其它框架不同,它努力成為社區驅動的框架。剛成立不到6個月,已經有30多個開發人員貢獻了代碼和文檔。

php unit怎麼測試為質量

PHPUnit是一個用PHP編程語言開發的開源軟體,是一個單元測試框架。PHPUnit由Sebastian Bergmann創建,源於Kent Beck的SUnit,是xUnit家族的框架之一。本文將探索PHPUnit,特別介紹自動化單元測試的基本用法。你需要掌握PHP編程語言的基本知識才能繼續。

介紹

單元測試是對單獨的代碼對象進行測試的過程,比如對函數、類、方法進行測試。單元測試可以使用任意一段已經寫好的測試代碼,也可以使用一些已經存在的測試框架,比如JUnit、PHPUnit或者Cantata++,單元測試框架提供了一系列共同、有用的功能來幫助人們編寫自動化的檢測單元,例如檢查一個實際的值是否符合我們期望的值的斷言。單元測試框架經常會包含每個測試的報告,以及給出你已經覆蓋到的代碼覆蓋率。

heiing

heiing

翻譯於 4年前

5人頂

頂 翻譯得不錯哦!

安裝

PHPUnit 通常以 PEAR 包,Composer bundle 或是 PHAR 文件形式存在。如果你要安裝它,你需要先安裝 PHP Code Coverage 依賴。在 PEAR 中,你需要天價 phpunit.de 頻道,並通過命令行安裝兩個包:

PHP Unit Testing with PHPUnit

(注意,在輸入時,默認的 XAMPP 的 PEAR 安裝已經被破壞:你需要在嘗試上面代碼之前先安裝 PEAR PHAR)。

測試一個簡單的類

試試只有單一方法的簡單類:

class TruthTeller

{

public function() tellTruth

{

return true;

}

}

是的,現在 tellTruth 方法總是返回 TRUE,那麼我們應改怎麼通過單元測試確保今後它的返回值不變?

K6F

K6F

翻譯於 4年前

4人頂

頂 翻譯得不錯哦!

使用PHPUnit,每組測試是PHPUnit_Framework_TestCase類的一個擴展類,它提供了常用的功能,如判斷。下面是一個對上述tellTruth方法的一個基本測試:

require_once ‘PHPUnit/Autoload.php’;

require_once ‘TruthTeller.class.php’;

class TruthTester extends PHPUnit_Framework_TestCase

{

function testTruthTeller()

{

$tt = new TruthTeller();

$this-assertTrue($tt-tellTruth());

}

}

請注意,您需要包括PHPUnit的自動載入器和「被測對象」,在這種情況下的TruthTeller類文件。

我們用剩餘的代碼要做的就是判斷,如果tellTruth方法被調用時,它將返回true。這些判斷是PHPUnit的核心 – 它們將決定一個測試是通過還是失敗。

Holiday_

Holiday_

翻譯於 4年前

2人頂

頂 翻譯得不錯哦!

如果你啟動了命令行提示,切換到你的測試所在目錄,運行 phpunit TruthTester (參數是你的測試文件名,去除 .php 擴展名),PHPUnit 將會運行文件中指定的所有它能找到的測試(測試將是名字以 test 開頭的所有方法)。

PHP Unit Testing with PHPUnit

如果你回到 TruthTeller 類,並將其方法的返回值改為 FALSE,你講看到類似下面的信息:

PHP Unit Testing with PHPUnit

這就是單元測試的核心——編寫斷言並判斷是否通過。當先前編寫並測試通過的代碼開始無法通過時,你就知道有更改的代碼對現有代碼起了負面影響。

在現實中,你肯定需要處理比上一個更複雜的情況。比如一個常見的測試是檢查下面的outputArray方法是否返回了一個特定數據結構的數組。

class ArrayTeller

{

public function outputArray()

{

return array(1,2,3);

}

}

對此方法的一個簡單測試可以這樣寫:

class ArrayTester extends PHPUnit_Framework_TestCase

{

function testArrayTeller()

{

$at = new ArrayTeller();

$result = $at-outputArray(1);

$this-assertInternalType(“array”, $result);

$this-assertCount(3, $result);

$this-assertEquals(1, $result[0]);

$this-assertEquals(3, $result[2]);

}

}

如你所見,使用PHPUnit進行單元測試時可以在每一行進行多樣化的檢查:可以檢查ArrayTeller返回的是否是一個數組,而非任何其他數據類型;可以檢查數組的長度;可以檢查數組中的單個值。除這些外,還有其它一些功能的斷言,比如如果你需要更複雜的判斷,假設要知道一個返回值是否處於兩個整數的區間內,只要你能用一個IF語句的結果來表述,你就可以用斷言assertTrue來測試結果。可點擊隨後鏈接來訪問PHPUnit官網文檔中的所有可用斷言列表,。

單元測試片面的講就是編寫覆蓋被測方法所有預期行為的測試,最好基於規範文檔,不過如果你在編寫覆蓋現有代碼的單元測試,將其視為白盒測試的一種形式更有用。如果你知道一個如下的簡單切換方法:

class Switcher

{

public function aOrB($switch, $a, $b)

{

if ($switch == TRUE)

{

return $a;

}

else

{

return $b;

}

}

}

… 你就知道需要編寫兩個測試,分別針對一種情形。但你開始質疑你是如何知道這些的——如果以後方法變為 True 返回 $a,False 返回 $b,其它情形拋出一個異常,理想情況是規範文檔中的某處有提及。無論如何,上面方法的測試如下:

class SwitcherTester extends PHPUnit_Framework_TestCase

{

function testSwitchTrue()

{

$switcher = new Switcher();

$result = $switcher-aOrB(TRUE, 1, 2);

$this-assertEquals(1, $result);

}

function testSwitchFalse()

{

$switcher = new Switcher();

$result = $switcher-aOrB(FALSE, 1, 2);

$this-assertEquals(2, $result);

}

}

運行兩個測試同在命令行運行 phpunit SwitcherTester 一樣簡單。

K6F

使用 setUp,簡化多個測試

當你的測試需要覆蓋越來越多的輸入組合及數據設置時,使用函數: setUp 將會非常有幫助。setUp 是 PHPUnit_Framework_TestCase 類中你可以覆寫以在類中所有及每個測試運行前運行的代碼。(注意,還有一個簡單的方法,tearDown,它會在所有測試結束後立即運行——這對關閉 socket 及文件指針很有幫助)

下面是如何精簡代碼的一個簡單的例子。嘗試一個依賴一些對象數據何輸入的方法。

class DataTeller

{

private $data;

public function __construct($data)

{

$this-data = $data;

}

public function outputData($switch)

{

if ($switch == TRUE)

{

if (!empty($this-data))

return $this-data;

else

return FALSE;

}

else

{

return “switch off”;

}

}

}

如果你繼續之前幼稚的方法,我們需要編寫三個測試,並實例化三個 DataTeller 對象,每個測試一次。然而,通過 setUp,我們可以講對 DataTellers對象的創建外包,至少是3個中的兩個。只有最後一個測試需要新的 DataTeller 被創建。

class DataTellerTester extends PHPUnit_Framework_TestCase

{

private $dt;

protected $data = “valid data”;

function setUp()

{

$this-dt = new DataTeller($this-data);

}

function testOutputArraySwitchOff()

{

$this-assertEquals(“switch off”, $this-dt-outputData(FALSE));

}

function testOutputArraySwitchOn()

{

$this-assertEquals($this-data, $this-dt-outputData(TRUE));

}

function testOutputArrayEmptySwitchOn()

{

$new_dt = new DataTeller(“”);

$this-assertEquals(FALSE, $new_dt-outputData(TRUE));

}

}

PHPUnit使用斷言來告訴你你所測試的代碼是否如你預期那樣工作。學到這裡,你現在應該已經可以寫一些簡單的測試來覆蓋一些功能相對比較獨立的類了。但當要測試一些互相有交互操作的類時,就要面對真正的挑戰了。為此,請收聽下一次講解,學習如何為靜態類寫測試,以及如何使用 mock(模擬對象)和 stubs(存根,樁點)來孤立你要測試的對象與其所在環境中其他代碼的聯繫。

php單元測試怎麼做

有集成單元測試框架,phpunit。這個框架封裝了常用的測試方法,比如判等,存在等方法,只要繼承這個測試類,就可以調用相應的方法來測試。

單元測試一般就是測試各個介面函數,根據給定的條件,判斷是否是預期的結果。單元測試主要是為了改動函數或者修改了介面的時候,測試是否影響了之前正常的功能。

php如何進行單元測試

何為單元測試:

指對軟體中的基本單元進行測試,如函數、方法等,以檢查其返回值或行為是否符合預期;實際中軟體是很複雜的,由許多組件構成,執行流程連貫在一起,要進行單元片段的測試,就需要為其提供執行上下文(或者說參數)和環境(比如打樁模擬一些對象)來運行,並監控其行為和返回值,為此我們就需要寫出做這件事情的程序代碼,這樣的代碼叫做測試用例。

許多測試用例有機結合在一起形成一個整體的測試,又叫做測試套件,被測試的程序代碼叫做生產代碼。phpunit這個軟體就是用來幫助我們寫測試用例並進行測試的。

php的單元測試:phpunit

在其官網有詳細教程,這裡介紹一些補充內容。

首先要明白phpunit軟體本身就是由php語言實現,其使用是通過命令行進行的,並不是通過瀏覽器訪問

明白這一點很重要,許多新人被卡在這裡,很基礎也很簡單,但似乎沒怎麼被提及。

在官網下載後得到一個phar文件,同時下載phpunit使用文檔,按照裡面的安裝方法進行安裝,之後在命令行輸入以下命令:

phpunit –help

如果顯示出了幫助信息即安裝成功,在命令行當前目錄下建立一個測試用例為yunke.php,內容如下:

?phpuse 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.00MBOK (1 test, 5 assertions)

恭喜,你已經成功運行了一個單元測試。

如何 進行 PHP 簡單 測試

其實我們每天都在做單元測試。你寫了一個函數,除了極簡單的外,總是要執行一下,看看功能是否正常,有時還要想辦法輸出些數據,如彈出信息窗口什麼的,這,也是單元測試,把這種單元測試稱為臨時單元測試。

樓上的這些工具太複雜了。

我認為,老師要求的,實際上就是要求每個功能單元都能夠帶入數據進行驗證。報告只要把驗證過程寫清楚就OK了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246314.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:14
下一篇 2024-12-12 13:14

相關推薦

  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • LuaEP:一款強大的Lua開發框架

    LuaEP是一個集成了可以快速開發web應用程序所需的組件的Lua開發框架。它以Lua語言為基礎,提供了許多常用介面和庫,使得開發者不需要從頭開始編寫web應用程序,而是專註於業務…

    編程 2025-04-28
  • Java持久層框架的複合主鍵實現

    用Java持久層框架來操作資料庫時,複合主鍵是常見的需求。這篇文章將詳細闡述javax.persistence複合主鍵的實現方式,並提供完整的示例代碼。 一、複合主鍵的定義 複合主…

    編程 2025-04-27
  • AMTVV:一個全能的開發框架

    AMTVV是一個面向現代Web應用程序的全能開發框架,它可以讓你的工作更加高效。AMTVV能夠處理各種各樣的技術棧,包括但不限於React、Angular、Vue和TypeScri…

    編程 2025-04-27

發表回復

登錄後才能評論