A. php怎樣進行單元測試
可以看看phpunit
網頁鏈接
B. 如何 進行 PHP 簡單 測試
其實我們每天都在做單元測試。你寫了一個函數,除了極簡單的外,總是要執行一下,看看功能是否正常,有時還要想辦法輸出些數據,如彈出信息窗口什麼的,這,也是單元測試,把這種單元測試稱為臨時單元測試。
樓上的這些工具太復雜了。
我認為,老師要求的,實際上就是要求每個功能單元都能夠帶入數據進行驗證。報告只要把驗證過程寫清楚就OK了。
C. 如何判斷報告單元 reporting 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(存根,樁點)來孤立你要測試的對象與其所在環境中其他代碼的聯系。
D. PHP中使用Guzzle進行API測試
本文將介紹 Guzzle , Guzzle 在單元測試中的使用。
來自 Guzzle 中文文檔的解釋:
使用 composer 安裝
或者編輯項目的 composer.json 文件,添加Guzzle作為依賴
執行 composer update
或使用 query 請求參數來聲明查詢字元串參數:
傳入 form_params 數組參數
同Guzzle的安裝, 也適用Composer工具。
或者在composer.json文件中聲明對phpunit/phpunit的依賴
執行安裝
我們在 tests\unit\MyApiTest.php 中定義了兩個測試用例
在項目根目錄執行命令
通過 Guzzle 強大的功能,可以方便進行API單元測試。大家可以查看 Guzzle 文檔,詳細了解 Guzzle 的使用。
E. thinkphp怎麼用phpunit寫測試用例
測試用例
本例中,根目錄的index.php的配置如下:
<?php
define('APP_NAME','example');
define('APP_PATH','../example/');
define('APP_PHPUNIT',false);
define('APP_DEBUG',true);
require('../ThinkPHP/ThinkPHP.php');
?>
首次訪問之後,生成以下目錄結構:
在example站點中新建文件夾,命名為「Testcase」。
測試Model
創建HelloModel.class.php:
<?php
classHelloModelextendsModel
{
publicfunctionsayHello()
{
print'Hello';
return'Hello';
}
}
在Test文件夾中新建Test.php文件作為PHPUnit,其中注意require ThinkPHP作為初始化框架環境,另外在Think.class.php中,修改
start()函數中,App::run()為!APP_PHPUNIT && App::run();
該區分站點運行與測試用例。
<?php
define('APP_NAME','example');
define('APP_PATH','./../../example/');
define('APP_PHPUNIT',true);
require('./../../ThinkPHP/ThinkPHP.php');
_Framework_TestCase{
publicfunctionsetUp(){}
publicfunctiontearDown(){}
}
在TestSayHello中加入測試用例:
publicfunctiontestHelloModel()
{
$hello=D('Hello');
$this->assertTrue($hello->sayHello('Hello')=='Hello');
}
測試Action
修改IndexAction.class.php如下:
<?php
classIndexActionextendsAction
{
publicfunctionindex()
{
$hello=D("Hello");
return$hello->sayHello();
}
}
瀏覽器訪問Index效果:
在TestSayHello中加入測試用例:
publicfunctiontestHelloAction()
{
$hello=newIndexAction();
$this->assertTrue($hello->index()=='Hello');
}
運行效果
運行Test.php效果如下:
Test通過,至此給ThinkPHP加上了單元測試。
F. php官方為什麼不推薦使用單元測試如phpunit或simpletest
在PHP領域,單元測試的工具主要有 PHPUNIT,PHPUNIT2和SimpleTest三種。
其中PHPUNIT在功能上很簡單,不算完善;
PHPUNIT2是專門為PHP5寫的單元 測試工具,在結構和功能上都向Junit看齊;
而SimpleTest則是一套非常實用的測試工具,其中的webTest支持對web程序界面的測試,是 Easy最為推薦的一款測試工具。在本文中,我們選擇SimpleTest進行介紹。
相關知識:PHPUNIT2也是一款很好的工具,尤其是架構上有很多值得圈點之處,希望將來能有機會在專門的文章中和大家分享。
SimpleTest:就是這么Simple安裝SimpleTest很簡單,上sf.net上下載一個源碼包,然後解壓到web目錄下就可以使用了,這里就不多說。
G. thinkphp5 怎麼使用單元測試
首先安裝ThinkPHP5的單元測試擴展,進入命令行,切換到tp5的應用根目錄下面,執行(當然你要安裝了composer):
composerrequiretopthink/think-testing
官方的5.0版本的擴展庫版本號都是1.*,2.0版本均為ThinkPHP5.1版本專用。
由於單元測試擴展的依賴較多,因此安裝過程會比較久,請耐心等待。
安裝完成後,會在應用根目錄下面增加tests目錄和phpunit.xml文件。
默認帶了一個tests/ExampleTest.php單元測試文件,我們可以直接在命令行下面運行單元測試:
phpthinkunit
請始終使用以上命令進行單元測試,而不是直接用phpunit來運行單元測試。
添加單元測試文件
我們來添加一個新的單元測試文件,單元測試文件為tests/IndexTest.php,內容如下:
<?php
usetestsTestCase;classIndexTestextendsTestCase{
()
{
$this->assertTrue(true);
}
}
注意,單元測試文件中定義的測試類如果不存在沖突,可以不需要使用命名空間。
H. 為什麼說單元測試能發現約80%的軟體缺陷
不好意思,沒看過這個筆試問題,不過經驗看來,這個80%有點高,因為:
1.單元測試是開發自己測自己,比較傾向於用合法的數據保證功能的完成
2.開發過程中,有的需求都沒有確定,開發沒法做單元測試
3.因為各個模塊的開發在單元測試的時候都是模擬其他模塊的數據來交互的,一旦進入集成和系統測試,會帶來大量問題,數據格式不對,數據長度不對,等等,我們不能假設在緊張的項目中,各個組能完整的溝通相互間的介面問題。還有很多是在設計中根本想不到的。
等等
I. 學習測試開發,有沒有用能學到什麼東西嗎
軟體測試的門檻相對來說還是比較低的,比起Java、PHP等這些後端開發來說,軟體測試需要的代碼量少,同時軟體測試也是IT技術上手比較容易的,學習難度低。
軟體測試前景怎麼樣,回答是前景很好。軟體測試人才缺口大,國內測試人才缺口達到30萬之多,且仍在逐年遞增,薪資待遇好,一般剛培訓出來的軟體測試工程師起步薪資都在8千左右,優秀學員年薪達到二十萬的都有,發展方向廣,軟體測試基本各行各業都需要,尤其是IT互聯網行業、金融等很吃香的行業。
隨著軟體行業的日漸成熟,用戶體驗感、軟體安全性越來越受到社會的關注,各大企業對軟體測試的重視度都有了明顯的抬升。從招聘需求來看,軟體測試崗位的招聘量處於明顯上升態勢,從薪資水平來看,軟體測試人員的待遇也是一增再增。
據統計,目前軟體測試人才的缺口在30萬人以上,IT行業國內外巨頭正在加緊爭奪軟體測試人才,華為曾一次拋出50名軟體測試人員的招聘大單,聯想、用友、瑞星等企業也紛紛打出高薪招聘軟體測試人才的啟事。
軟體測試人才的需求量還會越來越大
學習什麼內容:
一、軟體測試的原理
v 軟體工程:軟體的含義、軟體開發過程的特性 、軟體生命周期模型、軟體管理過程軟體質量和質量保證:軟體質量就是客戶的滿意度 、質量的概念、軟體質量的內涵、質量管理體系、SQA、SCM、SEPG
v軟體測試概念:軟體危機、軟體測試產生的背景,軟體缺陷是什麼、軟體測試職業發展,軟體測試人員應具備的素質和技能、軟體測試基本概念、軟體測試的目的、軟體測試的重要性、軟體測試的原則、軟體開發與軟體測試
v軟體測試依據和規范:軟體質量標准、軟體測試規范、界面規范、編碼規范、CMM和ISO9001思想結構體系、CMM VS ISO
二、軟體測試的技術
v軟體測試技術概述:軟體測試的基該方法,黑盒測試、白盒測試、靜態測試、動態測試、測試策略
v軟體測試流程:軟體測試流程、通用測試文檔模板 、軟體測試的分類、軟體包的質量特性
v 單元測試和集成測試:什麼是單元測試、單元測試的目標和任務、單元測試方法、調試與評估、什麼是集成測試、集成測試目標和任務、集成測試的模式與方法
v 系統測試和驗收測試:什麼是系統測試,系統測試的目標和任務,系統測試方法,系統測試中工具的應用、什麼是驗收測試、驗收測試的目標、驗收測試的過程和主要內容、產品規格說明書的驗證
v 特定類型的軟體測試:面向對象軟體的測試、面向對象軟體的特點、面向對象測試的層次與數據流、面向對象的單元測試、面向對象的集成測試 、基於應用伺服器的測試、應用伺服器的分類和特徵、基於Web伺服器應用的測試、基於資料庫應用伺服器的測試、基於J2EE平台的測試、軟體本地化測試:什麼是軟體本地化、軟體本地化的翻譯問題、軟體本地化測試的技術問題、本地化測試的重點
三、軟體測試的實踐
v測試環境的部署:測試環境的重要性、測試環境的各要素、建立測試實驗室、測試環境的維護和管理
v軟體測試用例的設計:測試用例來源、測試需求提取、測試用例設計、白盒測試用例設計方法、邏輯覆蓋法/基本路徑測試法 、黑盒測試用例設計方法、等價類劃分法/邊界值分析法/因果圖法/錯誤推測法 /功能圖法、測試用例的組織和跟蹤、使用實際項目實踐
v 報告所發現的軟體缺陷:軟體缺陷的描述 、軟體缺陷相關的信息、軟體缺陷的處理和跟蹤
四、軟體測試管理
v 組織和管理測試團隊:基於ISO的測試管理體系構成、測試團隊的地位和責任、測試團隊的構成 、測試團隊的管理和發展
五、軟體測試人員面臨的機會和挑戰
v軟體測試職位在IT行業的現狀
v軟體測試職位到底是干什麼?
v軟體測試行業的背景
v軟體測試人員需要具備的基本素質
v軟體測試工程師需掌握的技術技能大綱
v軟體測試人員後期的發展機會和挑戰