PHP單元測試?yán)?PHPUNIT深入用法(三)第1/2頁
Phpunit中的Annotations
如果有其他編程語言經(jīng)驗(yàn)的開發(fā)者,應(yīng)該對Annotations(注解)不陌生,其實(shí)在phpunit中,一個(gè)簡單的如下面的一段注釋也可以認(rèn)為是Annotations:













可以看到,其實(shí)一段以/** **/為標(biāo)記的文字,就可以認(rèn)為是一種Annotations,但Annotations其實(shí)不單單是簡單的注釋,它是與一個(gè)程序元素相關(guān)聯(lián)信息或者元數(shù)據(jù)的標(biāo)注,它不影響程序的運(yùn)行,但相關(guān)的軟件工具或框架能夠?qū)⑵滢D(zhuǎn)換成特殊的元數(shù)據(jù)標(biāo)記,以方便開發(fā)者以更少的代碼去提高效率(比如通過。如果你熟悉Java,則會(huì)發(fā)現(xiàn)在Java SE 5中及象Spring等框架中,都大量使用了Annotations。
然而,由于php并不象Java那樣是編譯性語言,因此本身缺乏去解析Annotations的機(jī)制,但幸好phpunit去提供了這樣的功能,我們以下面的代碼為例:












上面的只是一個(gè)簡單的加法的例子,為此,我們使用Annotations去編寫一個(gè)單元測試,在上兩篇文章中,我們采用的是手工編寫單元測試的方法,而本文中,將介紹使用phpunit命令行的方法,自動(dòng)生成單元測試的框架,方法如下:
首先把上面的類保存為MyMathClass.php,然后在命令行下運(yùn)行如下命令:

這時(shí)phpunit會(huì)自動(dòng)生成如下的框架單元測試代碼:








































可以看到,phpunit為我們生成的單元測試代碼自動(dòng)引入了原來的MyMathClass.php,同時(shí)也生成了setUp和tearDown方法,但唯一的核心單元測試代碼是留給了我們編寫。如果想在這個(gè)基礎(chǔ)上更快速的生成我們想要的單元測試代碼,要如何實(shí)現(xiàn)呢?沒錯(cuò),就是使用annotations!我們可以在原來的MyMathClass.php中加入如下的annotations。














然后再象上述一樣在命令行運(yùn)行:

這個(gè)時(shí)候會(huì)為我們生成如下的單元測試代碼:













看到了么?我們在原有的類中加入了注解@assert(1,2)==3,則phpunit自動(dòng)為我們生成了正確的單元測試代碼。當(dāng)然,可以參考phpunit手冊,學(xué)習(xí)到更多的關(guān)于@assert注解使用的規(guī)則。
下面再舉一個(gè)例子來講解annotations。假設(shè)我們的程序中的一個(gè)方法,只是僅需要數(shù)據(jù)的輸入,并且不依賴XML或者數(shù)據(jù)庫提供數(shù)據(jù)源,則為了測試這個(gè)方法,我們可能想到的一個(gè)方法是在程序中設(shè)置一個(gè)測試數(shù)據(jù)集去測試,但這里介紹一個(gè)比較簡單的方法,就是使用注解@dataProvider,修改MyMathClass.php如下:

























可以看到,這里使用了注解@dataProvider,指明了測試用例的數(shù)據(jù)提供者是由provider方法返回的一個(gè)數(shù)組。所以在單元測試時(shí),數(shù)組中的第0個(gè)元素則會(huì)賦值給$a,第1個(gè)元素則會(huì)賦值給b,第3個(gè)元素則會(huì)賦值給sum,可以看到,上面的第3個(gè)數(shù)組提供的數(shù)據(jù)是不能通過單元測試的,因?yàn)?+5不等于7。
此外,這里還簡單介紹兩個(gè)常用的annotations,比如@expectedException注解可以測試代碼中是否正確拋出了異常,比如:










這里就用注解的方法表示testException中必須拋出的異常類型為InvalidArgumentException。
另外一個(gè)是@cover注解。它的作用是標(biāo)識(shí)phpunit只為類中的哪些方法或作用域生成測試代碼,比如:










則phpunit只為SampleClass類中的publicMethod方法、SampleClass類中的所有非public聲明的方法和HelperClass類或者它的其中一個(gè)父類產(chǎn)生單元測試代碼。
- Windows下安裝PHP單元測試環(huán)境PHPUnit圖文教程
- PHP單元測試?yán)?PHPUNIT初探
- PHP單元測試?yán)?PHPUNIT深入用法(二)
- PHP單元測試PHPUnit簡單用法示例
- PHP單元測試框架PHPUnit用法詳解
- 使用PHPUnit進(jìn)行單元測試并生成代碼覆蓋率報(bào)告的方法
- php單元測試phpunit入門實(shí)例教程
- PHP使用phpunit進(jìn)行單元測試示例
- PHPUnit + Laravel單元測試常用技能
- Windows下wamp php單元測試工具PHPUnit安裝及生成日志文件配置方法
- laravel單元測試之phpUnit中old()函數(shù)報(bào)錯(cuò)解決
- PHPUnit 單元測試安裝與使用入門教程
相關(guān)文章
PHP下利用shell后臺(tái)運(yùn)行PHP腳本,并獲取該腳本的Process ID的代碼
PHP下利用shell后臺(tái)運(yùn)行PHP腳本,并獲取該腳本的Process ID的代碼,學(xué)習(xí)php的朋友可以參考下。2011-09-09解析array splice的移除數(shù)組中指定鍵的值,返回一個(gè)新的數(shù)組
array_splice這個(gè)數(shù)組函數(shù)在w3school的解釋是把數(shù)組中的一部分去掉并用其它值取代。所以我在做數(shù)組移除的時(shí)候沒有考慮到用這個(gè)函數(shù),或者因?yàn)閺膩頉]有用過2013-07-07一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
以下是一些PHP Coding Tips. 當(dāng)然, 這些Tips并不一定僅僅局限于PHP.大家有什么好的心得, 歡迎直接回復(fù)本文與更多的人分享.. 謝謝2011-05-05解析phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試
本篇文章是對phpstorm + xdebug 遠(yuǎn)程斷點(diǎn)調(diào)試進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06