2016-11-04 70 views
0

說我有一個字符串,我已格式化爲包含粗體字母。但在某些時候,我需要能夠去除格式。下面是我已經試過,但繼續得到NullPointerException異常Html.fromHtml不斷拋出NullPointerException

這裏是我的方法

public String stripFormatting(String input){ 
    return Html.fromHtml(input).toString(); 
} 

下面是一個電話

stripFormatting("<b>0</b>") 

的錯誤跟蹤不必多說了,但在這裏

java.lang.NullPointerException 
at com.mypkg.utils.MyClassTest.stripFormatting(MyClassTest.java:111) 
at com.mypkg.utils.MyClassTest.testLessThan100_000(MyClassTest.java:53) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

回答

2

我看到你正試圖從一個單元測試中運行 - 調用Html.fromHtml將無法​​正常工作,因爲單元測試無法使用Android相關代碼。

根據建立當地單元測試https://developer.android.com/training/testing/unit-testing/local-unit-tests.html模擬Android的依賴 -

默認情況下,Android的插件的搖籃,執行當地的單元測試針對的android.jar庫的修改版本,它不包含任何實際的代碼。相反,從你的單元測試中調用Android類的方法會引發異常。這是爲了確保您只測試您的代碼,並且不依賴於Android平臺的任何特定行爲(您尚未明確地嘲笑)。

它很容易固定,但 - 剛剛從一個單元測試,測試更改爲儀器測試(即androidTest目錄,將實際使用完整的android.jar,而不是像單元測試存根下) 。運行速度稍慢,但至少應該正確執行。

某些事情是可嘲弄的(例如,getStringcontext s經由Mockito,如上述鏈接中所述),但不適用於靜態方法。我懷疑如果你正在測試HTML剝離,你會希望實際測試它正在做你期望的事情,所以一個儀器測試是要走的路。

+0

我照你的建議做了。從android studio中,我將目錄移動到'(androidTest)'的子目錄。但現在它說:「未找到類...空測試套件」。 –

+0

您可能需要在類聲明之上使用'@RunWith(AndroidJUnit4.class)'註釋測試類(即,在public class ... Test {'以告訴Android Studio它是一個儀器測試。您可以找到更多信息在這裏:https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html – JRod

+0

我沒有運氣,我一直在看官方文檔和所有堆棧溢出。一直說「找不到類:」mypackage.MyClass「空測試套件」 –

相關問題