我有一個抓取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. 如何使你剛剛提取的zip文件的輸出日誌文件
- 2. 我該如何測試剛剛創建的maven原型?
- 3. 一個我剛剛點擊
- 4. 如何檢測設備是否剛剛重新啓動?
- 5. 剛剛發送了一個JS病毒。我如何安全地顯示輸出?
- 6. 從核心數據檢索剛剛加入的實體
- 7. JUnit測試失敗 - 抱怨剛剛插入的缺失數據
- 8. 剛剛嘗試過混淆
- 9. JQuery可以檢測出新類嗎?例如。剛剛發佈的新評論
- 10. JQuery的模板不處理 - 剛剛吐出來的原始文本
- 11. 與我剛剛發現這個方法函數參數
- 12. 模板on Rails的沒有發現,當我剛剛重定向
- 13. 檢測剛剛啓動的應用程序
- 14. 如果您在剛剛創建對象添加到一個可變的數組,你釋放你的對象
- 15. 檢索唯一ID爲剛添加
- 16. 從剛剛檢索到的id獲取Google Doc
- 17. SQL-Server常見問題 - 檢索剛剛插入的ID
- 18. 隱藏剛剛用If語句測試過的類
- 19. 在Django測試中無法登錄剛剛創建的用戶
- 20. 如何重新運行VSTS僅有的步驟(例如:剛剛測試)的一個子集釋放
- 21. 如何剛剛出現的一個元素上使用jQuery將焦點設置
- 22. 如何檢索剛剛使用嵌套方法創建的帳戶ID?
- 23. 推到數組剛剛讀取第二個索引在Javascript中
- 24. 如何強制Google CSE搜索剛剛上傳的PDF文件
- 25. 剛剛覆蓋MeasureOverride的性能如何?
- 26. 與NightwatchJS開始Selenium測試剛剛停止工作
- 27. 檢索剛剛插入到Java DB(Derby)數據庫中的記錄的編號
- 28. 如何結束輸入,當我剛剛在Android中輸入10個EditTexts時?
- 29. 剛剛從Firefox
- 30. 我剛剛在jboss上配置了一個新的數據源
我的意思是,測試大量的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