测试 textview 将文本显示为 HTML

Testing textview displays text as HTML

我正在尝试测试片段中的文本视图。在我的UI中,textview通过使用HtmlCompat api显示了一个HTML文本,如下所示:

tvNoDeals.text = HtmlCompat.fromHtml(getString(R.string.no_deals), HtmlCompat.FROM_HTML_MODE_LEGACY)

我的目标是使用 Espresso 通过 android 测试 来测试此行为。为此,我需要使用模拟上下文从 strings.xml 文件中获取我的字符串。我的问题是,我是被迫模拟上下文还是有其他方法来检查字符串是否匹配?

class RetailDealsTest : RetailTest() {

    lateinit var context: Context

    @Before
    fun setup() {
        context = getInstrumentation().targetContext
    }

    @Test
    fun testNoDealsUi() {
        val retail = getRetail(totalDeals = 0)
        launchScenario(retail)
        onView(withId(R.id.lNoDeals))
            .check(matches(isDisplayed()))
        onView(withId(R.id.lDeals))
            .check(matches(not(isDisplayed())))
        onView(withId(R.id.tvNoDeals))
            .apply {
                check(
                    matches(
                        withText(
                            HtmlCompat.fromHtml(
                                context.getString(R.string.no_deals),
                                HtmlCompat.FROM_HTML_MODE_LEGACY
                            ).toString()
                        )
                    )
                )
            }
        Thread.sleep(10000)
    }

    private fun launchScenario(retail: Retail): FragmentScenario<RetailDealsFragment> {
        val fragmentArgs = Bundle().apply {
            putParcelable(Constants.RETAIL_ID, retail)
        }

        return launchFragmentInContainer<RetailDealsFragment>(
            fragmentArgs
        )
    }
}

要获得您想使用的 Context 模拟

val context: Context = InstrumentationRegistry.getInstrumentation().targetContext

如果你想要资源

var resources: Resources = InstrumentationRegistry.getInstrumentation().targetContext.resources
//Then find the string using
resources.strings(your_id)