android - 使用导航架构的 Android 单元测试
问题描述
我正在使用 Android 导航组件,它有 1 个名为Authentication Activity的活动,其中包含 3 个名为SplashFragment、Login Fragment、OTP Fragment的片段。
我想对包含不同字段的登录片段进行单元测试,例如手机号码、姓名、电子邮件、状态下拉菜单。
请帮助我如何为手机号码字段、姓名、电子邮件编写单元测试用例。我附上了我的示例单元测试代码,gradle依赖。
尝试过的框架:- Mockito、Espresso、Roboelectric
提前致谢。
@Test
fun vmInitialization() {
val state1 = State("DL", "Delhi")
val state2 = State("UP", "Uttar Pradesh")
val list: ArrayList<State> = ArrayList()
list!!.add(state1)
list!!.add(state2)
val bundle = Bundle().putParcelableArrayList("stateList", list as ArrayList<Parcelable>)
launchFragment(R.id.loginFragment, bundle as Bundle)
val navController = TestNavHostController(ApplicationProvider.getApplicationContext())
navController.setGraph(R.navigation.nav_graph_auth)
val scenario = launchFragmentInContainer<LoginFragment>()
navController.setViewModelStore(ViewModelStore())
scenario.onFragment { fragment ->
Navigation.setViewNavController(fragment.requireView(), navController)
}
onView(ViewMatchers.withId(R.id.btn_proceed)).perform(ViewActions.click())
val navGraph = navController.navigatorProvider.navigation(
id = R.id.nav_graph_auth,
startDestination = R.id.otpFragment
) {
}
navController.setGraph(navGraph, null)
scenario.onFragment { fragment ->
assertNotNull(fragment)
assertThat(fragment).isNotNull()
assertThat(fragment.savedStateViewModel).isNotNull()
}
}
摇篮依赖: -
debugImplementation "androidx.navigation:navigation-testing:2.3.0-alpha06"
debugImplementation "androidx.test:runner:1.2.0"
debugImplementation "androidx.test:core:1.2.0"
debugImplementation("androidx.test:rules:1.2.0")
debugImplementation("androidx.fragment:fragment-ktx:1.1.0-beta01")
debugImplementation "androidx.test.ext:junit-ktx:1.1.1"
debugImplementation('androidx.fragment:fragment-testing:1.1.0') {
// exclude androidx.test:core while fragment_testing depends on 1.1.0
exclude group: 'androidx.test', module: 'core'
}
解决方案
我对单元测试/单元测试用例和 OTP 片段的意思感到困惑。但是,如果您要拥有一个Login Fragment
. 您的应用程序应该有一个 API,以便您可以User data
轻松地存储您的应用程序。除非您了解 sql,否则我建议您使用 Firebase 实时数据库/ Firebase 身份验证,因为它对初学者很友好。
这是使用 Firebase 的感觉的链接。( https://youtu.be/NhEU7G-KrEI )
推荐阅读
- arrays - 我想解构我的 api 并使用 react 返回它如何在我的用例中实现这一点?
- ssl - 托管没有 ssl 证书的 Blazor Web 应用程序
- python - 理解python中的嵌套函数
- flutter - 徽章结束并隐藏文字
- c# - 在c#中检查用户ID是否存在于Discord服务器中
- reactjs - 平面列表导航反应原生
- php - 在 laravel 7x 上找不到特征“Illuminate\Foundation\Auth\AuthenticatesUsers”
- flutter - Listview 和 Checkbox 使用 StatefulWidget(setState)
- javascript - 导出函数和module.exports有什么区别?
- asp.net - 在 ASP.NET 4.6 WebForms 上实现 AntiForgery 令牌