本文目錄一覽:
php單元測試怎麼做
有集成單元測試框架,phpunit。這個框架封裝了常用的測試方法,比如判等,存在等方法,只要繼承這個測試類,就可以調用相應的方法來測試。
單元測試一般就是測試各個接口函數,根據給定的條件,判斷是否是預期的結果。單元測試主要是為了改動函數或者修改了接口的時候,測試是否影響了之前正常的功能。
php網站修改工具
PHP Expert Editor 是一個容易使用的 PHP 開發工具,它的功能照顧到初級者及專業開發人員。基於Windows平台的PHP Expert Editor是一個PHP語言的集成開發環境(IDE)。PHP Expert Editor為PHP高手提供了許多方便、實用的特性,它還為初學者提供了諸如語法檢查、代碼瀏覽、內嵌FTP、代碼庫管理、代碼模版等易用的功能。內建的 http server 用作測試及除錯(你也可以使用其他 http server), PHP 語法檢查, FTP 功能, 程式碼樣板等功能。
PHP Expert Editor 適合PHP初學者和高級開發人員,它包括一個內部HTTP服務器和腳本器,可以進行語法檢查,測試PHP代碼等。
先安裝後phpxedit_42.exe後,然後將目錄下的phpxedit.exe覆蓋到安裝目錄。
PHP Expert Editor 官方有4.3版本下載,但是殺毒軟件居然報毒,所以還是把我收藏的4.2中文版奉獻出來,完美漢化破解版,用着舒心。
一設計工具
UML和相關設計工具
-ArgoUML
UML繪圖工具,支持PHPstub生成。(commercialspinoffisPosideon)–Java編寫。
-UmbrelloUML
UML繪圖工具,支持PHPstub生成。需要Unix/KDE。
-Dia
支持UML的繪圖工具-使用AutoDia生成PHP。
-XMI2PHP
從XMI文檔生成PHP代碼,用XML描述UML的一種形式。
二編碼工具
推薦的IDE/編輯器
-PHPEclipse
EclipseIDE的PHP插件
-PHPEdit
可能是Windows下最好的免費IDE了
-JEdit
支持PHP的IDE(plusloadsmore)。Java編寫,所以平台保持獨立。
-Jext
JEdit的孿生兄弟。
-gPHPEdit
Gnome/Linux下最好的(?)PHP編輯器。
-SciTE
跨平台編輯器
-PHPModeforEmacs
UnixEMACSIDE的PHPMode
三測試工具
Debuggers和Profilers
-XDebug(推薦)
出色的.debugger和profiler擴展
-AdvancedPHPDebugger
GeorgeSchlossnagle的debugger
-PEAR::Benchmark
用PHP寫的Benchmarking和profiling工具
-DBG
PHPDebugger
單元測試框架
-SimpleTest(推薦)
關於mockobjects出色的文檔和支持
-PEAR::PHPUnit
四部署工具
構建/部署工具
-PEARPackageManager(推薦)
允許你安裝PEARpackages(通過網絡),還能將你的代碼打包用於安裝。在命令行下執行運行。PHP編寫。
-PEAR::PackageFileManager
自動生成PackageManager使用的package.xml文件。PHP編寫。
-Phing
PHP的構建工具,相當於ApacheANT。在構建大型項目時值得研究。PHP編寫。
-ZZ/OSSInstaller
基於PHP的安裝嚮導,用於專業的PHP模塊化應用的發佈。
加速器
-TurckMMCache(強烈推薦)
集成OPCODECache,scriptencoder,profiler和動態內容緩存(readpersistence)於一體。提供Windows版本。
-PHPAccelerator(推薦)
OPCODECache
五管理工具
文檔生成工具
-phpDocumentor(推薦)
用源代碼注釋中生成API文檔(像Javadoc)。輸出可以被「模版化」,還支持HTML,PDF和CHM格式。PHP編寫。
-PHPXref(推薦)
創建源代碼的「交叉引用」,使你能夠看見一個變量/方法/函數在哪裡聲明以及在哪裡被引用。Perl編寫。
版本控制工具(此部分為Easy添加)
-CVS
開放源代碼的版本控制系統,很多大型項目,包括PHP本身,都用它管理代碼。
-CVSNT
用於WindowsNT(XP也可以)的CVS服務器程序
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軟件開發必須知道的技能?
PHP軟件開發與其他語言相比,它具有開發迅速、運行效率高、安全性好、可擴展性強、開源自由等優勢。
回首PHP軟件開發這幾年的發展,趨勢勢不可擋,一定是將來web程序開發的主流技術體系。
而作為PHP軟件開發員這些技能你又知道多少呢?不要在SQL查詢中使用*我們通常編寫SQL代碼在PHP軟件開發中,不過切記別在SQL查詢中使用通配符,特別是數據庫存在多列時。
要明確指定所需行,且只獲取它們。
這有利於減少所用資源,保護數據,使之變得更清晰。
不要信任用戶輸入信任用戶輸入是不科學的。
不要故作聰明作為PHP軟件開發員你只需要用優雅的代碼,來清楚地表明你的想法。
恰當命名變量,為代碼編寫文檔,注重清晰而非簡潔。
不要重新發明輪子PHP軟件開發已經發展很長一段時間,你想到的,或許早就有人發明了。
不要恐懼求助,Github,Composer,Packagist都能幫助到你。
無論是日誌、調色、性能分析器、單元測試框架、MailchimpAPI、TwitterBootstrap等都可以。
不要忽略其它語言作為PHP軟件開發員,不要只局限於你專業的,而忽略其他語言,北大青鳥建議你應該合理地學習其他語言並高效地使用它們。
PHP使用類似phpunit之類做自動測試有必要嗎
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(存根,樁點)來孤立你要測試的對象與其所在環境中其他代碼的聯繫。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/238716.html