【发布时间】:2021-09-27 06:07:50
【问题描述】:
我刚开始测试并尝试在我的片段中测试它:
当用户单击图标时,首先检查所选主题(使用实时数据)。
- 如果所选主题为浅色,则更改为深色模式并断言它为深色模式:
- 否则,如果所选主题为深色,则更改为浅色模式并断言它是浅色模式:
HomeFragmentTest.kt
@HiltAndroidTest
@UninstallModules(StorageModule::class)
class HomeFragmentTest{
@get:Rule(order = 0)
var hiltAndroidRule = HiltAndroidRule(this)
@get:Rule(order = 1)
var instantTaskExecutorRule = InstantTaskExecutorRule()
@Inject
lateinit var dataStorage: DataStorage
@Before
fun setUp(){
hiltAndroidRule.inject()
}
private lateinit var storageViewModel: StorageViewModel
private var selectedTheme: String? = null
@Test
fun testThatThemeIsChangedWhenClicked(){
storageViewModel = StorageViewModel(dataStorage)
launchFragmentInHiltContainer<HomeFragment> {
selectedTheme = storageViewModel.selectedTheme.getOrAwaitValue()
}
onView(withId(R.id.ic_theme_mode)).perform(click())
if (selectedTheme == "light"){
runOnUiThread {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
storageViewModel.changeSelectedTheme("dark")
}
assertThat(selectedTheme).isEqualTo("dark")
}
else if (selectedTheme == "dark"){
runOnUiThread {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
storageViewModel.changeSelectedTheme("light")
}
assertThat(selectedTheme).isEqualTo("light")
}
}
}
StorageViewModel.kt
@HiltViewModel
class StorageViewModel @Inject constructor(private val dataStorage: DataStorage)
: ViewModel() {
val selectedTheme = dataStorage.selectedTheme().asLiveData()
fun changeSelectedTheme(theme: String){
viewModelScope.launch {
dataStorage.setSelectedTheme(theme)
}
}
}
似乎由于某些原因,“storageViewModel.changeSelectedTheme("dark")”不起作用。
测试失败,出现错误:
预期:黑暗,但在 HomeFragmentTest.testThatThemeIsChangedWhenClicked(HomeFragmentTest.kt:70) 处是亮的(HomeFragmentTest.kt:70)
当我再次运行时,我得到:
预期:亮,但在 HomeFragmentTest.testThatThemeIsChangedWhenClicked(HomeFragmentTest.kt:76) 时是暗的
【问题讨论】:
标签: android unit-testing kotlin testing android-instrumentation