2009-12-05 76 views
1

我正在爲Web應用程序編寫PHPUnit測試用例。由於測試在命令行環境中運行,我嘲笑了一些預定義的變量,如$ _POST,$ _GET,$ _SERVER等。我的測試必須確保我的控制器類解析正確的JSON輸入(通過原始POST發送,並通過php://輸入發送)。問題是,如何在不運行Web服務器的情況下操縱php://輸入的值?嘲笑原始POST數據

回答

0

我會說你沒有足夠的關注;我看到它的樣子,你應該有:

  • 一個方法,從PHP獲取原始數據://輸入並傳送數據到另一個方法
  • 接收一個字符串,並解析它作爲第二個方法JSON

這兩種方法的每一種都是唯一的一件事;這樣,你可以單元-測試。

就你而言,你可以單元測試第二種方法(實際完成工作的方法)的行爲 - 而不依賴於輸入來自哪裏。

0

如何將閱讀功能移動到一個類(甚至如果你使用PHP 5.3),然後在測試時用模擬實例替換它?

2

POST數據,無論是輸送到PHP的標準輸入,受CONTENT_LENGTH環境變量告訴PHP如何讀取的字節數(所以改後的數據,你只需管在不同的東西)

GET數據是什麼位於QUERY_STRING環境變量中。

其他環境變量可以設置由PHP用於填充之類的東西$ _ SERVER

有用見 this