创建新的 SpannableStringBuilder returns 空

Creating new SpannableStringBuilder returns null

这是我的单元测试。不知何故,当我使用非空字符串参数创建实例化 SpannableStringBuilder 实例时,它似乎为空。这段代码有什么问题?

public class CardNumberTextWatcherTest {

private CardNumberTextWatcher watcher;

@Before
public void setUp() throws Exception {
    watcher = new CardNumberTextWatcher();
}


@Test
public void afterTextChanged_cardNumberDividedWithSpaces() {
    assertTransformText("1111222233334444", "1111 2222 3333 4444");
}

private void assertTransformText(final String testStr,
                                 final String expectedStr) {
    final CardNumberTextWatcher watcher = new CardNumberTextWatcher();
    final Editable actualStr = new SpannableStringBuilder(testStr);
    // When I debug I see that actualStr value is null. Therefore test 
    //doesn't pass. What's the problem?
    watcher.transformText(actualStr);
    assertEquals(expectedStr, actualStr.toString());
}


}

您正在调用 actualStr.toString(),这是与断言进行比较的对象,而不是 actualStr 本身,因此请查找通过 SpannableStringBuilder 的路由以查看可能导致 null 的结果来自 toString()。可能 testStrnull.

问题出在测试目录中。一旦 SpannableStringBuilder 成为 Android SDK 的一部分,它就无法在常规 JUnit 测试目录中解析。当我 将我的 class 移动到 androidTest 目录 时,一切开始按预期工作。

@RunWith(RobolectricTestRunner::class)

使用 Robolectric 解决了问题。