2016-11-04 37 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“空测试套件” –

相关问题