使用Androidx Test库中的ActivityScenario来模拟Activity生命周期,并添加LocaleChangeCallback监听语言环境的变化。示例如下:
import androidx.test.core.app.ActivityScenario
import androidx.test.runner.AndroidJUnit4
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import java.util.*
@RunWith(AndroidJUnit4::class)
class MyTest{
private lateinit var activityScenario: ActivityScenario
private var testLocale: Locale = Locale("es", "ES") //设置测试语言环境
@Before
fun setUp() {
Locale.setDefault(testLocale)
activityScenario = ActivityScenario.launch(MyActivity::class.java)
activityScenario.onActivity {
val config = it.resources.configuration
config.setLocale(testLocale)
it.createConfigurationContext(config)
}
}
@After
fun tearDown() {
activityScenario.close()
}
@Test
fun testLocaleChange() {
val config = activityScenario.launch().result.get().resources.configuration
assert(config.locale == testLocale)
Locale.setDefault(Locale("en","US")) //切换系统语言环境
activityScenario.onActivity {
val newConfig = it.resources.configuration
if (newConfig.locale != testLocale){
//语言环境改变
}
assert(newConfig.locale == Locale.getDefault())
}
}
@Test
fun testSomethingElse(){
// other tests
}
}
上一篇:Android测试GitHub Actions: 没有这样的文件或目录,打开'undefined/licenses/android-sdk-arm-dbt-license'
下一篇:Android测试会抛出IllegalStateException: No instrumentation registered异常。