我有一個抓取HTML模板類,並基本上返回到調用者的HTML。我如何使用PHP單元測試調用者?我只是assertTrue(is_string(call_function))
?這似乎是一個愚蠢的測試,我認爲我可能會對它進行不正確的測試。你如何測試一個剛剛檢索模板輸出的函數?
0
A
回答
0
返回的HTML是否應該格式良好?如果是的話,你可以驗證它。
並且/或者如果總是假定某個節點或文本字符串存在,則可以檢查它是否存在。使用strpos
,正則表達式或合適的DOM解析器。
這個StackOverflow的問題給你一些想法的方式來解析和查詢您的HTML:How do you parse and process HTML/XML in PHP?
更一般地,我通常做法如何測試返回字符串的函數的方法是使用:
$html=call_function();
$this->assertEquals("dummy",$html);
然後失敗了,但告訴我正確的輸出,所以我粘貼在:
$html=call_function();
$expected=<<<EOD
<html>
...
</html>
EOD;
$this->assertEquals($expected,$html);
如果失敗再然後,我研究了不同ences兩個正確我有答案。如果這是一個很好的單元測試,他們應該甚至會有所不同嗎?我是否想用模擬對象來替換系統中一些無法控制的方面? (例如,如果它返回的HTML是谷歌搜索結果,那麼也許我想要一個模擬對象來模擬調用谷歌,但總是返回完全相同的搜索結果頁。)
如果唯一的區別是時間戳,我可能會使用正則表達式尋找並摧毀它們,給我一個應該始終如一的字符串,例如
$html=preg_replace('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/','[TIMESTAMP]',$html);
加成 如果HTML字符串是非常大的,一個替代方案是使用md5()
將其降低到一個簡短的字符串。當某些事情破裂時,這仍然會提醒你,但是(大的)缺點是當它破裂時你不知道在哪裏。如果您擔心這一點,那麼最好使用DOM方法(或其可憐的表兄弟,正則表達式)來挑選要測試的HTML的幾個關鍵部分。
相關問題
- 1. C4模板剛剛消失
- 2. 如何使你剛剛提取的zip文件的輸出日誌文件
- 3. 如何檢索剛剛插入到數據庫
- 4. 我該如何測試剛剛創建的maven原型?
- 5. 如何檢索後ID爲我剛剛通過Facebook的API
- 6. 一個我剛剛點擊
- 7. 如何執行「剛試後測試」
- 8. 如何檢測設備是否剛剛重新啓動?
- 9. 剛剛看到在Android Studio中調試應用程序輸出
- 10. 剛剛發送了一個JS病毒。我如何安全地顯示輸出?
- 11. JUnit測試失敗 - 抱怨剛剛插入的缺失數據
- 12. 從行檢索的ID我剛剛寫入數據庫
- 13. 從核心數據檢索剛剛加入的實體
- 14. 剛剛重新加載後可以執行一個函數......?
- 15. 剛剛嘗試過混淆
- 16. 檢測剛剛在JavaScript中結束了哪個CSS動畫?
- 17. JQuery可以檢測出新類嗎?例如。剛剛發佈的新評論
- 18. 隊列剛剛彈出第一個和最後一個元素
- 19. python visual studio-輸出剛剛閃爍一秒
- 20. 如果您在剛剛創建對象添加到一個可變的數組,你釋放你的對象
- 21. 與我剛剛發現這個方法函數參數
- 22. JQuery的模板不處理 - 剛剛吐出來的原始文本
- 23. Angular - 從剛剛加載的模板訪問DOM元素
- 24. 模板on Rails的沒有發現,當我剛剛重定向
- 25. 檢測剛剛啓動的應用程序
- 26. 提取剛剛從一個完整的DateTime模式
- 27. 隱藏剛剛用If語句測試過的類
- 28. 在Django測試中無法登錄剛剛創建的用戶
- 29. 檢索唯一ID爲剛添加
- 30. SQL-Server常見問題 - 檢索剛剛插入的ID
我的意思是,測試大量的HTML是很奇怪的。比方說模板引擎,如果我使用模板引擎來調用不同的模板並測試這些調用。爲了預期的結果測試,在PHP中包裝大量的html會很奇怪? – Strawberry 2012-07-22 17:27:37
@Strawberry除非你有一個虐待老闆,否則測試不是一種懲罰,或者你爲了它而做的一些事情:-)你對代碼進行測試,在你將來處理代碼時可能會中斷代碼。模板引擎輸出可以依賴於很多東西,我認爲完整的輸出通常可以用於測試。如果只考慮源代碼醜陋,您可以將'$ expected'保留在外部文件中,並使用'file_get_contents'加載它。 – 2012-07-22 22:27:07
@Strawberry我用非常大的文件的'md5'建議更新了我的答案,但如前所述,我不推薦它。 – 2012-07-22 22:31:17