Nou*_*vay 3 html java string android
假设我有一个字符串,我已将其格式化为包含粗体字母。但在某些时候我需要能够删除格式。以下是我尝试过但不断收到 NullPointerException
这是我的方法
public String stripFormatting(String input){
return Html.fromHtml(input).toString();
}
Run Code Online (Sandbox Code Playgroud)
这里有一个电话
stripFormatting("<b>0</b>")
Run Code Online (Sandbox Code Playgroud)
错误跟踪就不多说了,但是这里
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)
Run Code Online (Sandbox Code Playgroud)
我看到您正在尝试从单元测试运行此代码 - 调用Html.fromHtml
将无法按预期工作,因为单元测试无法使用 Android 相关代码。
根据模拟 Android 依赖项下的构建本地单元测试https://developer.android.com/training/testing/unit-testing/local-unit-tests.html -
默认情况下,Gradle 的 Android 插件会针对 android.jar 库的修改版本执行本地单元测试,该版本不包含任何实际代码。相反,单元测试中对 Android 类的方法调用会引发异常。这是为了确保您仅测试您的代码,而不依赖于 Android 平台的任何特定行为(您尚未明确模拟)。
不过,它很容易修复 - 只需将您的测试从单元测试更改为仪器测试(即,在目录下androidTest
,它实际上将使用完整的 android.jar 而不是像单元测试那样的存根)。运行起来会慢一点,但至少应该正确执行。
某些东西是可模拟的(例如,通过 MockitogetString
从context
s 进行模拟,如上面的链接所述),但这不适用于静态方法。我怀疑如果您正在测试 HTML 剥离,您会想要实际测试它是否符合您的预期,因此仪器测试是最佳选择。
归档时间: |
|
查看次数: |
2077 次 |
最近记录: |