亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHPUnit 測試失敗,因為文件路徑位置不正確

PHPUnit 測試失敗,因為文件路徑位置不正確

PHP
喵喔喔 2021-08-28 18:43:01
我正在嘗試為我的 Slim PHP 應用程序中的單個函數編寫一個簡單的單元測試。該函數使用 mkdir() 創建一個目錄,我希望測試斷言該目錄已成功創建。使用前端應用程序測試時,文件夾創建成功,但運行測試時,找不到目錄1) TestController::testCreate mkdir(): 沒有那個文件或目錄我們使用以下方法自動加載類://composer.json    "autoload": {        "psr-4": {            "App\\": "app",            "tests\\": "tests/"        }    }這是創建目錄的函數://Controllor.phppublic function create($request, $response){   mkdir("../public/folder");}使用該應用程序,這會按預期在以下位置創建一個目錄-app-public/folder這是測試功能的示例://TestController.phppublic function testCreate(){    $controller = new Controller($this->container);    $request = $this->requestFactory();    $response = new \Slim\Http\Response();    $response = $controller>create($request, $response, []);    //Assertions below..}我正在使用 phpunit.xml 通過將 bootstrap="vendor/autoload.php" 插入配置文件來引導 autoload.php 文件。我還嘗試從 TestController.php 中要求 vendor/autoload.php 并嘗試$_SERVER['DOCUMENT_ROOT']在 TestController.php 中手動設置如何在運行 TestController.php 時自動加載命名空間,以便 create() 函數從正確的位置調用 mkdir()?
查看完整描述

2 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

嗯,有一個小問題和一個大問題。

小的——你正在失去上下文,特別是工作目錄。因此,不清楚您的目錄在哪里創建,以及該位置是否實際上可寫。為了克服這個問題,我會創建一個可配置的值——一個應該發生事情的目錄名稱。對于實際用例,我會提供 $_SERVER['DOCUMENT_ROOT'] (或任何其他合適的值),對于我會使用的測試/tmp(或更好sys_get_temp_dir())。

為了更好地說明第一個問題(您要問的問題):

  • 目前您的代碼假設了一些關于運行環境的假設,并且該假設不是一個安全的假設,例如“總是有array_keys()可用的功能”

  • 將此類假設轉換為可配置值是一種很好的做法

  • 使其可配置也使測試更容易,因為您的測試環境與您的生產/開發/登臺環境分離

更大的一個——這不是一個單元測試,因為你正在檢查你的代碼如何與一些外部實體交互,在這種情況下是文件系統。這是一個功能測試。要進行單元測試,您需要模擬mkdir(),為此您需要將它抽象到一些像這樣的接口后面:

interface DirMaker {

    public function mkdir($name);

}

該接口的實現也可以處理配置。在測試中,您可以提供一個模擬,它只承認mkdir()被調用的事實,正如預期的那樣。


查看完整回答
反對 回復 2021-08-28
?
www說

TA貢獻1775條經驗 獲得超8個贊

你有多種選擇

  1. 使用vfsStream可以模擬文件系統。適用于所有 PHP 函數,如 mkdir、file_exists 等...

  2. 使用Flysystem作為文件系統的抽象庫。使用 Null Adapter 進行測試。

  3. 創建一個自定義接口并為測試實現一個真正的文件系統類和一個內存中模擬類。


查看完整回答
反對 回復 2021-08-28
  • 2 回答
  • 0 關注
  • 187 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號