2013-03-10 12 views
0

我想獲得更多有關JUnit及其在Android中的使用的經驗。 參考此官方Android培訓Parsing XML data我想知道是否有人可以提供如何測試一些使用的方法的例子。Android JUnit和解析xml數據 - 測試什麼

特別是你會如何測試包含在類StackOverflowXmlParser方法和方法loadXmlFromNetwork()和downloadUrl()類NetworkActivity.java]

+2

肯定的,但有時不是你是誰決定的格式文件解析的人,這樣做的目的post是爲了增強某人的JUnit(onAndroid)在一個普通場景下的學習。 – eeadev 2013-03-10 09:40:02

回答

2

我可以給你的單元測試的最好的建議是第一個真正瞭解什麼是測試單元。當我編寫測試時,尤其是單元測試時,我確定我的測試單元是一個單獨的課程。一切ELSE都被嘲笑,我的測試確保了班上的每一個公共方法都能做到它所承諾的。

這就是說,你問的方法是EVIL UNTESTABLE CODE。看到這樣的代碼來自Google工程師,這有點令人震驚。我鄙視的猜測是它是一個前端Web開發人員,因爲變量都在方法的頂部聲明,JavaScript樣式和每個局部變量的初始化都沒有null的值,這表明編寫示例isn't very experienced with Java的人。

您將不得不重構方法以使其進入可測試狀態。例如loadXmlFromNetwork提供了一個存在的API。它不是從網絡上「加載」xml,它也將它解析爲一個List<Entry>,然後完成後,它將更多的數據填充到HTML格式的字符串中,然後返回該數據。

僅僅這種方法的第一個問題就是它在它自己內部創建對象,而不是詢問它需要什麼。這給測試帶來了問題,因爲你不能模擬這些對象來測試邏輯。在一個測試中,你不希望產生網絡依賴,所以你想嘲笑HttpURLConnection並嘲笑行爲來執行你的代碼。

爲你指出正確的方向,觀看來自谷歌的鉛檢測傳道這個視頻:

http://www.youtube.com/watch?v=wEhu57pih5w

+0

對不起克里斯托弗,它不是一個谷歌朋友,但據我所知,java中的局部變量必須被初始化,並且你的鏈接(http://www.javapractices.com/topic/TopicAction.do?Id=14)是指到java字段(初始化字段是多餘的)。 – eeadev 2013-03-10 11:18:13

+0

除非你試圖做一些嘗試在try/catch塊之外使用它們的值,否則不應該聲明/初始化局部變量直到它們的使用點。看[這裏](http://www.javapractices.com/topic/TopicAction.do?Id=126) – 2013-03-10 20:07:48