亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > PHP > 正文

對(duì)于PHPUnit測(cè)試私有屬性和方法的功能分析

2020-03-22 20:31:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了PHPUnit測(cè)試私有屬性和方法功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了使用PHPUnit針對(duì)私有屬性和方法進(jìn)行測(cè)試的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHPUnit測(cè)試私有屬性和方法功能。分享給大家供大家參考,具體如下:

一、測(cè)試類中的私有方法:

html' target='_blank'>class Sample private $a = 0; private function run() echo $a;}

上面只是簡(jiǎn)單的寫(xiě)了一個(gè)類包含,一個(gè)私有變量和一個(gè)私有方法。對(duì)于protected和private方法,由于無(wú)法像是用public方法一樣直接調(diào)用,所以在使用phpunit進(jìn)行單測(cè)的時(shí)候,多有不便,特別是當(dāng)一個(gè)類中,對(duì)外只提供少量接口,內(nèi)部使用了大量private方法的情況。

對(duì)于protected方法,建議使用繼承的方式進(jìn)行測(cè)試,在此就不再贅述。而對(duì)于private方法的測(cè)試,建議使用php的反射機(jī)制來(lái)進(jìn)行。話不多說(shuō),上代碼:

class testSample() $method = new ReflectionMethod( Sample , run  $method- setAccessible(true); //將run方法從private變成類似于public的權(quán)限 $method- invoke(new Sample()); //調(diào)用run方法}

如果run方法是靜態(tài)的,如:

private static function run() echo run is a private static function }

那么invoke函數(shù)還可以這么寫(xiě):

$method- invoke(null); //只有靜態(tài)方法可以不必傳類的實(shí)例化

如果run還需要傳參,比如:

private function run($x, $y) return $x + $y;}

那么,測(cè)試代碼可以改為:

$method- invokeArgs(new Sample(), array(1, 2));//array中依次寫(xiě)入要傳的參數(shù)。執(zhí)行結(jié)果返回3

【注意】:利用反射的方法測(cè)試私有方法雖好,但setAccessible函數(shù)是php5.3.2版本以后才支持的( =5.3.2)

二、私有屬性的get/set

說(shuō)完了私有方法,再來(lái)看看私有屬性,依舊拿Sample類作為例子,想要獲取或設(shè)置Sample類中的私有屬性$a的值可以用如下方法:

public function testPrivateProperty() $reflectedClass = new ReflectionClass( Sample  $reflectedProperty = $reflectedClass- getProperty( a  $reflectedProperty- setAccessible(true); $reflectedProperty- getValue(); //獲取$a的值 $reflectedProperty- setValue(123); //給$a賦值:$a = 123;}

上述方法對(duì)靜態(tài)屬性依然有效。

到此,是不是瞬間感覺(jué)測(cè)試私有方法或?qū)傩宰兊煤苋菀琢恕?/p>

附:PHPunit 測(cè)試私有方法(英文原文)

This article is part of a series on testing untestable code:

Testing private methods

Testing code that uses singletons

Stubbing static methods

Stubbing hard-coded dependencies

No, not those privates. If you need help with those, this book might help.

One question I get over and over again when talking about Unit Testing is this:

How do I test the private attributes and methods of my objects?

Lets assume we have a class Foo:

 ?phpclass Foo private $bar = baz  public function doSomething() return $this- bar = $this- doSomethingPrivate(); private function doSomethingPrivate() return blah ? 

Before we explore how protected and private attributes and methods can be tested directly, lets have a look at how they can be tested indirectly.

The following test calls the testDoSomething() method which in turn calls thedoSomethingPrivate() method:

 ?phpclass FooTest extends PHPUnit_Framework_TestCase * @covers Foo::doSomething * @covers Foo::doSomethingPrivate public function testDoSomething() $foo = new Foo; $this- assertEquals( blah , $foo- doSomething());? 

The test above assumes that testDoSomething() only works correctly whentestDoSomethingPrivate() works correctly. This means that we have indirectly testedtestDoSomethingPrivate(). The problem with this approach is that when the test fails we do not know directly where the root cause for the failure is. It could be in eithertestDoSomething() or testDoSomethingPrivate(). This makes the test less valuable.

PHPUnit supports reading protected and private attributes through thePHPUnit_Framework_Assert::readAttribute() method. Convenience wrappers such asPHPUnit_Framework_TestCase::assertAttributeEquals() exist to express assertions onprotected and private attributes:

 ?phpclass FooTest extends PHPUnit_Framework_TestCase public function testPrivateAttribute() $this- assertAttributeEquals( baz , /* expected value */ bar , /* attribute name */ new Foo /* object */? 

PHP 5.3.2 introduces the ReflectionMethod::setAccessible() method to allow the invocation of protected and private methods through the Reflection API:

 ?phpclass FooTest extends PHPUnit_Framework_TestCase * @covers Foo::doSomethingPrivate public function testPrivateMethod() $method = new ReflectionMethod( Foo , doSomethingPrivate  $method- setAccessible(TRUE); $this- assertEquals( blah , $method- invoke(new Foo)? 

In the test above we directly test testDoSomethingPrivate(). When it fails we immediately know where to look for the root cause.

I agree with Dave Thomas and Andy Hunt, who write in their book Pragmatic Unit Testing :

In general, you don t want to break any encapsulation for the sake of testing (or as Mom used to say, don t expose your privates! ). Most of the time, you should be able to test a class by exercising its public methods. If there is significant functionality that is hidden behind private or protected access, that might be a warning sign that there s another class in there struggling to get out.

So: Just because the testing of protected and private attributes and methods is possible does not mean that this is a good thing .

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP !

相關(guān)推薦:

PHP和redis實(shí)現(xiàn)悲觀鎖機(jī)制的解析

php中可變函數(shù)的使用總結(jié)

以上就是對(duì)于PHPUnit測(cè)試私有屬性和方法的功能分析的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
91精品啪在线观看国产81旧版| 91精品国自产在线偷拍蜜桃| 日av在线不卡| 欧洲精品一区二区三区在线观看| 欧美videos中文字幕| 蜜桃免费在线视频| 日日日日人人人夜夜夜2017| 欧美一区二区三区在线电影| 国产交换配乱淫视频免费| 韩国18福利视频免费观看| 黄色污网站在线观看| 99九九精品视频| 日韩中文字幕网站| 一区二区在线免费观看| 97色在线视频| 日本精品免费观看高清观看| 91精品国产综合久久久蜜臀图片| 成人动漫在线播放| 日韩激情一二三区| 日韩欧美另类中文字幕| 日韩中文字幕网| 亚洲区一区二| 久久福利精品| 中文资源在线网| 伊人影院在线视频| av一本久道久久综合久久鬼色| 你懂的在线观看视频网站| 1769国内精品视频在线播放| www.天天操.com| 日本在线视频1区| 夜夜躁很很躁日日躁麻豆| www日韩av| 亚洲午夜精品一区二区国产| 一区二区三区毛片免费| 精品毛片三在线观看| 成人高潮aa毛片免费| eeuss第一页| 欧美日韩精品一区二区三区在线观看| 成人免费视频免费观看| 香蕉视频成人在线| 一区二区激情| 久久91亚洲精品中文字幕奶水| 亚洲女人天堂色在线7777| 91精品国产色综合久久久蜜香臀| 黄色三级电影网站| 黄色动漫免费网站| 亚洲精品美女在线观看播放| 免费国产视频| 色综合天天狠天天透天天伊人| 日本a级片久久久| 夜夜春很很躁夜夜躁| 亚洲日韩第九十九页| 一区视频在线看| jlzzjlzz亚洲日本少妇| 国产精品入口免费视频一| 欧美一区二区人人喊爽| 大黄网站在线观看| 国产精品永久久久久久久久久| 中文字幕在线播放第一页| 国产免费黄色一级片| 夜夜未满十八勿进的爽爽影视| 精品国产一区二区三区久久久狼牙| 久久久久久久久久久久久久久久久久| 国产伦理一区二区| 在线观看免费高清视频97| 久操手机在线视频| 日韩精品福利在线| 伊人365影院| 亚洲色图校园春色| 亚洲免费成人av| 2021国产精品久久精品| 国产又粗又硬又长| 国产亚洲自拍一区| 日韩精品卡一| 亚洲国产欧美一区二区三区丁香婷| 午夜一区二区三区四区| 奇米精品一区二区三区在线观看| 国产精品久久久久久久久久免费| 三级黄色小视频| 中文字幕日韩综合av| 精品一区二区视频| 国产精品自拍首页| 在线观看毛片视频| 户外极限露出调教在线视频| 国产在线精品国自产拍免费| 91丨九色丨国产在线| 麻豆精品视频在线观看视频| 欧美不卡在线播放| 一区二区三区日韩欧美| 国产亚洲精品aa午夜观看| 日韩经典中文字幕一区| 色国产精品一区在线观看| 国产视频一区二区三区在线播放| 五月天丁香婷| 欧美淫片网站| 中文乱码免费一区二区三区下载| 日本精品久久久久| 亚洲国产精品久久卡一| 国产视频在线看| 欧美视频国产视频| 青青草原成人网| 在线观看老湿视频福利| japan乱配videos老少配| 欧美夫妻性生活xx| 强伦女教师2:伦理在线观看| 最近中文字幕在线6| 国产欧美精品国产国产专区| 日本h片在线| 天天av天天翘天天综合网色鬼国产| 毛片av中文字幕一区二区| 免费xxxxx网站中文字幕| 日韩综合精品| 最近2019中文字幕在线高清| 五月天激情小说| 天天摸夜夜添狠狠添婷婷| 国产精品久久久久久婷婷天堂| 69堂免费视频| 亚洲国产欧美不卡在线观看| 999国内精品视频在线| 激情五月俺来也| 97超碰免费在线观看| 精品少妇久久久久久888优播| 日韩精品久久久久久久玫瑰园| 日本成人三级电影网站| 欧美另类videos黑人极品| 清纯唯美日韩制服另类| 国产精品观看在线亚洲人成网| 国产精品成人va在线观看| 老熟妇仑乱一区二区av| 精品国产成人av在线免| 久久免费公开视频| 国产67194| 影音av资源| 亚洲一区二区三区免费| 久久久久久9| 欧美日韩国产成人精品| 在线能看的av网站| 永久在线免费观看| 亚洲系列在线观看| 黄色免费观看| 国产精品一二三区在线观看| 免费视频最近日韩| 日日摸夜夜添夜夜添亚洲女人| 精品久久久久成人码免费动漫| 国产精品成人一区二区| 亚洲人成无码网站久久99热国产| 婷婷综合福利| 群体交乱之放荡娇妻一区二区| 色婷婷av777| 久久国产精品一区二区| 91香蕉视频在线下载| 国家队第一季免费高清在线观看| 精品精品国产高清a毛片牛牛| 国产精品一区一区| 熟妇人妻久久中文字幕| 欧美在线播放高清精品| 在线中文字幕观看| 欧美人妻一区二区| 99久久精品免费观看国产| 在线看一级片| 国内在线观看一区二区三区| 免费看黄色一级视频| 国产精品v日韩精品v在线观看| 国产青青在线视频| 国产日韩精品suv| 在线观看中文字幕的网站| 校园春色亚洲| 五月天丁香在线| 久久久性生活视频| 欧美成人一区在线观看| 国产美女精品一区二区三区| 久久av在线播放| 欧美国产一区二区三区激情无套| 开心久久婷婷综合中文字幕| 亚洲高清av在线| 日本日本精品二区免费| 麻豆一区二区三区在线观看| 蜜桃免费网站一区二区三区| 国产卡1卡2卡三卡在线| 免费中文字幕在线| 色一情一乱一区二区| 黄色片免费在线| 一区二区三区视频在线观看视频| 精品欧美激情精品一区| 亚洲高清免费观看高清完整版在线观看| 超碰在线caoporn| 碰碰在线视频| 日日日日人人人夜夜夜2017| 免费无码不卡视频在线观看| 亚洲天堂视频在线| 国产va免费精品高清在线观看| 亚洲在线免费播放| 日韩欧美高清在线播放| www.浪潮av.com| 精品久久久噜噜噜噜久久图片| 伊人再见免费在线观看高清版| 国产精品传媒| 波多野结衣电影在线播放| 超碰在线人人| 亚洲女同中文字幕| wwwww在线观看| 欧美成人一区二区在线| 亚洲黄色成人网| 国产欧美三级| 欧美极品日韩| 一区二区三区视频播放| 国产成人三级一区二区在线观看一| 国产高清在线看| 久久久久久九九九九九| 欧美一区二区三区不卡视频| 午夜影院福利社| 久久视频免费在线观看| 性娇小13――14欧美| www.亚洲国产| 久久久久久久999精品视频| zzjj国产精品一区二区| 国产欧美日韩精品一区| 免费黄色网页在线观看| 看片网站欧美日韩| 久久久精品免费视频| 午夜美女久久久久爽久久| 色综合五月天| 熟女俱乐部一区二区视频在线| h网站免费观看| 日韩理论电影大全| 成码无人av片在线观看网站| 亚洲图区综合网| 亚洲激情网址| 欧美一区观看| 美腿丝袜亚洲三区| 亚洲伊人久久大香线蕉av| 精品在线视频免费观看| 日韩08精品| 欧美午夜性色大片在线观看| 午夜久久福利| 日韩在线一区视频| 色妞一区二区三区| avtt中文字幕| 91桃色在线| 国产黄a三级三级看三级| 成年人网站大全| 国产欧美精品一区二区| 色噜噜狠狠永久免费| 国产精品毛片a∨一区二区三区| 欧美有码在线观看视频| 波多野结衣小视频| 亚洲伊人网在线观看| 香蕉视频黄色片| 久久国产精品一区二区| 国产大学生自拍| 国产一区二区观看| 在线电影国产精品| 亚洲色图另类色图| 国产精品9999久久久久仙踪林| 日本黄色播放器| 欧洲不卡av| 舔足天天操天天射| 无码小电影在线观看网站免费| 国产中文精品久高清在线不| 国产永久免费观看| av先锋资源网| 亚洲视频中文| 福利电影一区| www日韩在线| 国产亚洲精品美女| 中文字幕在线观看第三页| 欧美精品国产精品日韩精品| 久久免费精品视频在这里| 视频在线亚洲| 久久国产乱子精品免费女| 亚洲国产无码精品| 国产成人无码一区二区在线观看| 暖暖视频在线免费观看| 国产精品无码2021在线观看| 岛国精品一区二区三区| 国产成人免费在线观看视频| 日韩美女视频免费看| 中文字幕av一区二区三区佐山爱| 亚洲精品欧美激情| 精品丝袜在线| 99re66热这里只有精品4| 免费v片在线观看| 亚洲一级黄色av| 四虎视频在线精品免费网址| 国产亚洲成精品久久| 一本岛在免费一二三区| av免费观看网址| 好吊色视频988gao在线观看| 国产精品日韩高清| 精品99又大又爽又硬少妇毛片| 亚洲免费在线视频观看| 国产日本韩国在线播放| 国产精品久久久久久久9999| 国产成人在线中文字幕| 亚洲免费在线播放视频| 国产一区二区久久久久| 亚洲影院免费| 欧美精品一区二区三区三州| 精品国偷自产在线| 97在线观视频免费观看| 成人污版视频| 欧美连裤袜在线视频| 伊是香蕉大人久久| 欧美激情免费| 在线观看入口黄最新永久免费国产| 韩国av电影在线观看| 夜夜嗨av色一区二区不卡| 成人亚洲免费视频| 亚洲美女www午夜| 成人福利免费在线观看| 色综合久久88色综合天天6| 青娱乐自拍偷拍| 欧美日韩在线免费播放| 国产亚洲精品午夜高清影院| 天天揉久久久久亚洲精品| 日韩一级二级三级精品视频| xxxxhd欧美精品| 亚洲欧洲av一区二区| 国模吧精品人体gogo| 亚洲伊人精品酒店| 欧美一区二区福利| 五月天亚洲视频| www.久久久久爱免| 国产suv一区二区三区88区| 国产在线观看www| 久久精品2019中文字幕| 国产精品女人久久久久久| 激情五月综合色婷婷一区二区|