2012-07-19 72 views

回答

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的幾個關鍵部分。

+0

我的意思是,測試大量的HTML是很奇怪的。比方說模板引擎,如果我使用模板引擎來調用不同的模板並測試這些調用。爲了預期的結果測試,在PHP中包裝大量的html會很奇怪? – Strawberry 2012-07-22 17:27:37

+0

@Strawberry除非你有一個虐待老闆,否則測試不是一種懲罰,或者你爲了它而做的一些事情:-)你對代碼進行測試,在你將來處理代碼時可能會中斷代碼。模板引擎輸出可以依賴於很多東西,我認爲完整的輸出通常可以用於測試。如果只考慮源代碼醜陋,您可以將'$ expected'保留在外部文件中,並使用'file_get_contents'加載它。 – 2012-07-22 22:27:07

+0

@Strawberry我用非常大的文件的'md5'建議更新了我的答案,但如前所述,我不推薦它。 – 2012-07-22 22:31:17

相關問題