Java Html.fromHtml不断抛出NullPointerException

Java Html.fromHtml不断抛出NullPointerException,java,android,html,string,Java,Android,Html,String,假设我有一个字符串,我已经格式化为包含粗体字母。但在某些时候,我需要能够剥离格式。下面是我尝试过的,但一直得到NullPointerException 这是我的方法 public String stripFormatting(String input){ return Html.fromHtml(input).toString(); } 有个电话 stripFormatting("<b>0</b>") 我看到您正试图从单元测试运行此功能-调用Html.from

假设我有一个字符串,我已经格式化为包含粗体字母。但在某些时候,我需要能够剥离格式。下面是我尝试过的,但一直得到NullPointerException

这是我的方法

public String stripFormatting(String input){
    return Html.fromHtml(input).toString();
}
有个电话

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

我看到您正试图从单元测试运行此功能-调用
Html.fromHtml
将无法按预期工作,因为单元测试不能使用依赖于Android的代码

根据在模拟Android依赖项下构建本地单元测试-

默认情况下,Gradle的Android插件对修改后的Android.jar库执行本地单元测试,该库不包含任何实际代码。相反,单元测试中对Android类的方法调用会引发异常。这是为了确保您只测试代码,而不依赖于Android平台的任何特定行为(您没有显式模拟)

不过,它很容易修复——只需将您的测试从单元测试更改为工具测试(即,在
androidTest
目录下,它实际上将使用完整的android.jar,而不是用于单元测试的存根)。运行起来会稍微慢一点,但至少应该正确执行


某些东西是可模拟的(例如,通过Mockito从
context
s获得的
getString
,如上面的链接所述),但这不适用于静态方法。我怀疑如果你在测试HTML剥离,你会想实际测试它是否在做你期望的事情,所以仪器测试是一个不错的选择。

我看到你试图从单元测试运行这个测试-调用
HTML。fromHtml
将无法按预期工作,因为单元测试不能使用依赖Android的代码

根据在模拟Android依赖项下构建本地单元测试-

默认情况下,Gradle的Android插件对修改后的Android.jar库执行本地单元测试,该库不包含任何实际代码。相反,单元测试中对Android类的方法调用会引发异常。这是为了确保您只测试代码,而不依赖于Android平台的任何特定行为(您没有显式模拟)

不过,它很容易修复——只需将您的测试从单元测试更改为工具测试(即,在
androidTest
目录下,它实际上将使用完整的android.jar,而不是用于单元测试的存根)。运行起来会稍微慢一点,但至少应该正确执行


某些东西是可模拟的(例如,通过Mockito从
context
s获得的
getString
,如上面的链接所述),但这不适用于静态方法。我怀疑,如果您正在测试HTML剥离,您会希望实际测试它是否按照您的预期进行,因此,仪器测试是一种可行的方法。

我按照您的建议做了。在android studio中,我将目录移动为
(androidTest)
的子目录。但现在它一直说:“找不到类…空测试套件”。您可能需要在类声明(即
公共类…测试)上方用
@RunWith(AndroidJUnit4.Class)
注释测试类{
告诉Android Studio这是一个仪器测试。你可以在这里找到更多信息:我运气不好。我一直在查看官方文档和所有堆栈溢出。它一直在说“未找到类:”mypackage.MyClass"清空测试套件`对于那些每次将测试从
test
目录移动到
androidTest
目录或反之亦然时都面临与@NouvelTravay相同问题的其他人,转到
编辑配置
并删除其中提到的任何测试,在配置下,然后再次运行您的测试。它会工作的。我按照您的建议做了。从在android studio中,我将目录移动为
(androidTest)
的子目录。但现在它一直说:“找不到类…空的测试套件”。您可能需要在类声明(即
公共类…测试)上方用
@RunWith(AndroidJUnit4.Class)
注释测试类{
告诉Android Studio这是一个仪器测试。你可以在这里找到更多信息:我运气不好。我一直在查看官方文档和所有堆栈溢出。它一直在说“未找到类:”mypackage.MyClass“清空测试套件`对于那些在每次将测试从
test
移动到
androidTest
目录或反之亦然时都面临与@NouvelTravay相同问题的人,转到
edit configuration
并删除其中提到的任何测试,在configurations下,然后再次运行测试。它会起作用。”。
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)