You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Kotlin中TextView的加粗扩展函数编写测试用例?

测试方案建议

你可以根据需求选择两种测试路径,不需要额外依赖第三方UI测试框架也可以完成验证:

方案1:使用Robolectric做本地单元测试(推荐,运行速度快,无需真机/模拟器)

这种方案可以直接在JVM上运行测试,耗时短,适合快速验证逻辑正确性:

  • 首先在模块级build.gradle的testImplementation依赖中添加Robolectric和JUnit相关依赖
  • 测试逻辑步骤:
    1. 新建一个TextView实例,给它设置原始文本,比如Hello World Test
    2. 调用扩展函数,传入要加粗的文本,比如"World"
    3. 从TextView取出Spannable内容,遍历查找所有StyleSpan
    4. 验证对应位置的Span确实是Typeface.BOLD,并且位置匹配传入的文本起止位置
  • 示例测试代码:
@RunWith(RobolectricTestRunner::class)
class TextViewExtTest {
    @Test
    fun `makeSectionOfTextBold sets correct span for existing text`() {
        val textView = TextView(ApplicationProvider.getApplicationContext())
        val originalText = "Hello World Test"
        textView.text = originalText
        val boldText = "World"
        
        textView.makeSectionOfTextBold(boldText)
        
        val spannable = textView.text as Spannable
        val spans = spannable.getSpans(0, spannable.length, StyleSpan::class.java)
        val targetSpan = spans.firstOrNull { it.style == Typeface.BOLD }
        assertNotNull(targetSpan)
        assertEquals(originalText.indexOf(boldText), spannable.getSpanStart(targetSpan))
        assertEquals(originalText.indexOf(boldText) + boldText.length, spannable.getSpanEnd(targetSpan))
    }

    @Test
    fun `makeSectionOfTextBold does nothing when text not exist`() {
        val textView = TextView(ApplicationProvider.getApplicationContext())
        textView.text = "Hello World"
        textView.makeSectionOfTextBold("NotFound")
        
        val spannable = textView.text as Spannable
        val spans = spannable.getSpans(0, spannable.length, StyleSpan::class.java)
        assertEquals(0, spans.size)
    }
}

方案2:Instrumented测试(跑在真机/模拟器上)

如果要验证实际渲染效果,可以用这种方案:

  • 依赖androidTestImplementation的JUnit、Espresso基础依赖
  • 测试时在测试布局中加入一个TextView,设置文本后调用扩展函数,再断言对应区域的Span属性符合预期
  • 也可以配合Espresso的自定义Matcher来验证文本的加粗状态,适合和UI流程结合的测试场景

额外优化提示

你当前的实现存在一个小局限:如果同一段要加粗的文本在内容中出现多次,只会给第一次出现的内容添加加粗效果,如果需要支持全量匹配,可以把单次indexOf查找替换为循环查找所有匹配位置后再依次设置Span。

内容的提问来源于stack exchange,提问作者Asfar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:45:01