在銅焊,我們做我們的盡職調查,以確保一切都在我們控製在最佳狀態為客戶工作。manbetx万博全站客户端一個關鍵元素,我們總是測試?我們的釺Android軟件開發工具包(SDK)。我們的sdk釺平台的一個重要部分;和我們的目標是通過高代碼覆蓋率沒有bug的代碼。沒有bug的代碼在我們的Android SDK對我們是非常重要的,不僅因為我們船SDK數以百萬計的設備,還因為一個幹淨的代碼意味著更加無縫的客戶的經驗。manbetx万博全站客户端當我們做找到SDK代碼中的一個錯誤,這意味著我們必須運出一個更新,那麼客戶需要升級,推出一個新版本的應用程序,然後有他們所有的終端用戶需要下載更新。manbetx万博全站客户端最終,這意味著不必要的錯誤可以在野外很長一段時間。
的目標沒有錯誤意味著大量的測試,甚至更多的時間來應對失敗測試。下麵是一個片段的SDK模塊測試報告從我們的基地。
在編寫一個新特性時,重要的是要知道如何以及為什麼盡快測試失敗。如果你經常寫測試Logcat(安卓的係統消息工具),您可以調試通過尋找在你的日誌失敗發生。然而,在測試Logcat可能非常冗長。
在釺,我們使用JUnit的TestRule自動化檢索相關logcat輸出的過程,當一個測試失敗。
一個簡單的測試
以下是一個簡單的實效方法用於我們的代碼,一個日誌消息第一行:
現在,如果我們修改方法的相應的測試失敗,像這樣:
然後,可以預見的是,我們得到以下輸出:
然而,假設我們想記錄我們最初logcat輸出在測試期間與原測試失敗的信息。與一些特殊的邏輯,它將理想的樣子如下:
寫一個TestRule
JUnit4,測試由測試運行器語句得到評估。你能想到的聲明評估運行測試。微不足道的TestRule例子簡單地評估輸入語句並返回它。
TestRule評估聲明之後,將這句話傳遞給其他TestRules,形成一個鏈。你可以閱讀的RuleChainjavadoc如果你感興趣這是如何工作的引擎蓋下麵!
幕後看TestRule
在JUnit測試失敗時,它實際上隻是拋出AssertionError被抓的測試運行器。下麵是JUnit斷言的來源:
如果我們想重新包裝一個真正的自定義消息測試失敗,我們會在別處引發一個異常。
自定義TestRule
現在我們logcat捕捉方法是準備好了,下一步是創建一個自定義TestRule測試失敗時將調用它。
最終的產品
這是我們修改測試運行器如何顯示從先前的測試。注意,頂部的消息包含我們的定製信息類的原始誤差和logcat輸出:
測試快樂!
在銅焊工作感興趣?看看我們目前的職位空缺!