使用 PHPUnit 模擬私有方法
簡介
模擬私有方法可能是測試邏輯的有用技術。類別而不暴露其實作細節。但是,請務必謹慎處理此問題,以避免破壞封裝並損害程式碼的完整性。
問題
考慮以下範例:
<code class="php">class A { public function b() { // some code $this->c(); // some more code } private function c(){ // some code } }</code>
如何使用PHPUnit 對私有方法c() 的結果進行存根測試公用函數b( ) 的「更多代碼」部分?
解決方案
選項1:考慮重構
通常,直接測試私有方法不被認為是最佳實踐。相反,應專注於測試類別的公共 API。任何內部實作細節都應被視為黑盒子。
選項 2:利用 Mock(謹慎操作)
但是,在某些情況下,模擬私有方法可能會必要的。要使用PHPUnit 實現此目的:
-
為被測試的類別建立一個模擬物件:
<code class="php">$mock = $this->getMockBuilder('A') ->disableOriginalConstructor() ->getMock();</code>
-
定義私有的預期行為方法:
<code class="php">$mock->expects($this->once()) ->method('c') ->will($this->returnValue(YOUR_STUBBED_VALUE));</code>
-
將原始實例替換為測試中的模擬:
<code class="php">$originalInstance = new A(); $this->reflection()->setProtectedProperty( $originalInstance, 'c', $mock );</code>
- 照常運行您的測試。
結論
雖然為了測試目的而模擬私有方法可能很誘人,但優先考慮封裝原則並避免不必要地暴露內部細節非常重要。考慮重構您的程式碼以在不依賴私有方法模擬的情況下啟用測試。
以上是什麼時候應該在 PHPUnit 中模擬私有方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

禪工作室 13.0.1
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具