如何在 Jetpack 可组合测试中获取字符串资源
How can I get string resource in Jetpack composable test
我们可以像这样通过stringResource获取Composable中的字符串资源
@Composable
fun Heading(
@StringRes textResource: Int
) {
Text(
text = stringResource(id = textResource),
color = colorBlack,
)
}
但是我们如何在可组合测试中获取这个字符串资源。
class HeadingTest {
@get:Rule
val composeTestRule = createComposeRule()
@ExperimentalComposeUiApi
@Test
fun headingTest() {
// Start the app
composeTestRule.setContent {
AppTheme {
// In Compose world
Heading(textResource = R.string.some_text)
}
}
//How can I access string resource here
composeTestRule.onNodeWithText(???).assertExists()
}
}
我不确定是否有更好的方法,但您可以执行以下操作:
class HeadingTest {
@get:Rule
val composeTestRule = createComposeRule()
@ExperimentalComposeUiApi
@Test
fun headingTest() {
val textId = R.string.some_text
var string = ""
// Start the app
composeTestRule.setContent {
string = stringResource(id = textId)
AppTheme {
// In Compose world
Heading(textResource = textId)
}
}
composeTestRule.onNodeWithText(string).assertExists()
}
}
如果您启动 AndroidComposeTestRule
,您可以获得一个 activity 实例
class HeadingTest {
@get:Rule
val androidComposeTestRule = createAndroidComposeRule<ComponentActivity>()
@ExperimentalComposeUiApi
@Test
fun headingTest() {
// Start the app
androidComposeTestRule.setContent {
AppTheme {
// In Compose world
Heading(textResource = R.string.some_text)
}
}
//Call getString() from activity instance
androidComposeTestRule.onNodeWithText(androidComposeTestRule.activity.getString(R.string.some_text))
.assertExists()
}
}
你仍然可以使用 androidx.test.platform.app.InstrumentationRegistry
在 composeapp 中获取资源。
val context: Context = InstrumentationRegistry.getInstrumentation().getTargetContext()
var string2 = context.resources.getString(R.string.hello_world)
通过 createAndroidComposeRule
创建撰写规则,然后您将能够访问 activity.getString()
方法
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
val activity = composeTestRule.activity
@Test
fun testDisplayAndClickable() {
val home = composeTestRule.activity.getString(R.string.home)
}
我们可以像这样通过stringResource获取Composable中的字符串资源
@Composable
fun Heading(
@StringRes textResource: Int
) {
Text(
text = stringResource(id = textResource),
color = colorBlack,
)
}
但是我们如何在可组合测试中获取这个字符串资源。
class HeadingTest {
@get:Rule
val composeTestRule = createComposeRule()
@ExperimentalComposeUiApi
@Test
fun headingTest() {
// Start the app
composeTestRule.setContent {
AppTheme {
// In Compose world
Heading(textResource = R.string.some_text)
}
}
//How can I access string resource here
composeTestRule.onNodeWithText(???).assertExists()
}
}
我不确定是否有更好的方法,但您可以执行以下操作:
class HeadingTest {
@get:Rule
val composeTestRule = createComposeRule()
@ExperimentalComposeUiApi
@Test
fun headingTest() {
val textId = R.string.some_text
var string = ""
// Start the app
composeTestRule.setContent {
string = stringResource(id = textId)
AppTheme {
// In Compose world
Heading(textResource = textId)
}
}
composeTestRule.onNodeWithText(string).assertExists()
}
}
如果您启动 AndroidComposeTestRule
,您可以获得一个 activity 实例class HeadingTest {
@get:Rule
val androidComposeTestRule = createAndroidComposeRule<ComponentActivity>()
@ExperimentalComposeUiApi
@Test
fun headingTest() {
// Start the app
androidComposeTestRule.setContent {
AppTheme {
// In Compose world
Heading(textResource = R.string.some_text)
}
}
//Call getString() from activity instance
androidComposeTestRule.onNodeWithText(androidComposeTestRule.activity.getString(R.string.some_text))
.assertExists()
}
}
你仍然可以使用 androidx.test.platform.app.InstrumentationRegistry
在 composeapp 中获取资源。
val context: Context = InstrumentationRegistry.getInstrumentation().getTargetContext()
var string2 = context.resources.getString(R.string.hello_world)
通过 createAndroidComposeRule
创建撰写规则,然后您将能够访问 activity.getString()
方法
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
val activity = composeTestRule.activity
@Test
fun testDisplayAndClickable() {
val home = composeTestRule.activity.getString(R.string.home)
}