2012-05-04 66 views
3

我有一個Java類,從數據庫中獲取表單定義,然後根據表單定義呈現html,javascript和css,它使用了大量的「appendable.append(...)。append(...)」來構建出現錯誤的html代碼片段。由於javascript,css,html元素都是動態的(取決於表單定義),因此Jsp和常見模板框架(例如FreeMarker)不在此處。由於某些原因,GWT也不是一種選擇。如何對動態呈現html和css的Java代碼進行單元測試?

單元測試此渲染器的直接方法是對預期的html代碼進行硬編碼,然後與實際輸出進行比較,但測試非常脆弱。

什麼是單元測試這種html渲染器的最佳方式?

謝謝大家提前。

+1

我苦思冥想一個來裝飾你的測試編碼預期HTML輸出是一種合理的方法(你我們希望將這些預期結果放在文本文件中,但不是Java源代碼)。試圖編寫與輸出的「含義」相匹配的代碼容易出錯,困難且耗時。您很可能不得不更新測試,但至少您會收到警報並有機會在發生任何變化時進行審查。只是儘量使片段儘可能小以避免輸出中無關的事物。 – Thilo

回答

3

如果您對預期的HTML值進行硬編碼,則測試可能很脆弱,但它們可能會捕獲大部分錯誤。另一種方法是檢查HTML輸出中是否存在某些關鍵或重要的標籤。這種方法更加靈活,但可能會漏掉一些錯誤。要決定你應該使用哪一個,請考慮你期望HTML結構改變的頻率。

這裏有一個平衡點。您的測試越具體,最脆弱。但是,如果你不夠具體,你的測試不會發現任何錯誤。需要練習來培養對於具體的具體感受。

然而,一般來說,脆性測試是非常危險的,所以它們可能是「更大的邪惡」。如果你的測試標記了很多誤報,你會開始忽略它們,然後它們變得毫無用處。我建議你去驗證鑰匙標籤的存在。

+0

謝謝大家分享你的想法。我決定使用Jsoup來生成html並測試1。html標記有效性; 2,dom結構; 3,特定的標籤/節點與期望的屬性和值一起存在。 Jsoup的CSS選擇器功能使得測試這些非常簡單 –

+0

@JayHuang太棒了!祝你好運。 :) – Oleksi

2

我會採取雙管齊下的方法。首先,您要驗證您生成的單個片段。您的測試應驗證這些組件是否按預期工作。其次,您應該驗證每個生成的文檔整體的類型是否有效且一致。有第三方工具爲您執行此驗證。有關示例,請參閱http://www.w3.org/QA/Tools/

0

您提到的比較方法是一種很好的方法,它被稱爲測試的「黃金大師」方法。

存在與JUnit來做到這一點的工作原理驗證庫,極大地簡化了所謂的審批過程中測試http://www.approvaltests.com

這也有助於防止脆性通過記者會打開你的結果和/或你的黃金掌握差異記者或網絡瀏覽器。

你正在尋找的調用是:

Approvals.VerifyHtml(yourHtml) 

,你會想與任

@UseReporter(DiffReporter.class) 
@UseReporter(FileLauncherReporter.class) 
@UseReporter({DiffReporter.class, FileLauncherReporter.class}) 
相關問題