我有一個公開的方法,我正在進行單元測試。該方法在類中調用多個私有方法。問題是其中一些私有方法使用Android資源,如getString()和Html.fromHtml()。如何使用Android庫本地單元測試私有方法?
我知道如何使用Mockito來模擬像Context.class這樣的對象,但是如何模擬不能公開訪問的對象呢?
我試過Robolectric,但它似乎會由於未初始化的變量而導致大量的NPE。代碼庫不是我的,並且使用了很多靜態方法,因此調試它們將是最後的手段。
我有一個公開的方法,我正在進行單元測試。該方法在類中調用多個私有方法。問題是其中一些私有方法使用Android資源,如getString()和Html.fromHtml()。如何使用Android庫本地單元測試私有方法?
我知道如何使用Mockito來模擬像Context.class這樣的對象,但是如何模擬不能公開訪問的對象呢?
我試過Robolectric,但它似乎會由於未初始化的變量而導致大量的NPE。代碼庫不是我的,並且使用了很多靜態方法,因此調試它們將是最後的手段。
不幸的是,不可能像Html.fromHtml()那樣嘲諷靜態方法,或者甚至像Log.d()這樣的日誌記錄方法。您依靠Robolectric通過爲您提供實施來幫助您。
如果你想要做的完全正確的單元測試沒有Robolectric,您可以使用gradle這個「測試」的目標,其增加了mockable Android的基礎設施類,你運行時類路徑嘲笑之類的語境和資源。你不需要第三方軟件來做到這一點。但是,您的測試會以「Stubbed!」的形式崩潰Android靜態方法調用消息。爲了避免這種情況,您必須將所有這些靜態方法調用包裝到一個對象中,然後在測試過程中對其進行模擬。一種痛苦。