我想單元測試一個做SAX解析並創建一個對象的類。 該類將一個字符串作爲表示Internet上文檔URL的參數,對其進行解析,然後根據內容創建一個對象。如何重構我的課程,以便我可以進行單元測試?
我不想讓單元測試實際訪問網絡,所以我想要解析一些測試xml文件。不過,我不知道如何從我的AndroidTestCases訪問它們。我不想將測試文件包含在實際應用程序中,我希望他們在測試項目中(這是一個單獨的項目,因爲我可以收集Android測試的標準 - 由於需要定製AndroidManifest .xml,一個)。
一種方法是將XML文件放入測試項目的資產目錄中,我可以使用getContext().getAssets().open(filename
)將它們讀入測試用例中的InputStream
,但是我的類需要一個URL字符串。我寧願不必爲此類提供InputStream而不是當前的URL字符串。我可以通過創建兩個方法來測試解析,一個接受一個字符串,一個接受Inputstream,然後測試第二個,但是我怎麼才能測試一個只接受一個字符串的方法呢?
我應該如何設計我的班級和/或測試來規避此問題?
該方法和使我的類接受InputStream而不是字符串有什麼區別?這不僅僅是增加額外的間接水平? – JRL 2010-05-21 14:34:12
是的。這種額外的抽象層次意味着您可以在不影響主要方法的情況下更改底層代碼。然後,您不必在正常情況下將InputStream傳遞到方法中,因爲這通常不是您需要完成的任務。 – Tejs 2010-05-21 14:45:33