android - espresso ActivityTestRule 用于具有泛型类型参数的活动
问题描述
我已经宣布了这样的活动
class QuestionnaireActivity<T : ProfileModel> : AppCompatActivity()
我想写一个浓缩咖啡测试,所以我在写 ActivityTestRule 之类的
@Rule @JvmField
val activityRule = object : ActivityTestRule<QuestionnaireActivity<ProfileModel.PersonalInfo>>(QuestionnaireActivity<ProfileModel.LifeStyleInfo>::class.java){
override fun getActivityIntent(): Intent = QuestionnaireActivity.getQuestionnaireIntent(InstrumentationRegistry.getTargetContext(), 3, ProfileModel.LifeStyleInfo())
}
但编译器抱怨(它关于 ActivityTestRule 的参数)
only classes are allowed on the left hand side of a class literal
这里声明泛型不能与class一起使用。
如果我删除泛型类型参数,则错误变为
Type inference failed.
Expected type mismatch: inferred type is Class<QuestionnaireActivity<*>> but Class<QuestionnaireActivity<ProfileModel.PersonalInfo>!>! was expected
我应该怎么办?
感谢您的关注
解决方案
与此处类似,解决方案涉及定义这样的内联函数
inline fun <reified T: Activity> activityTestRuleWithIntent(intent: Intent) = object : ActivityTestRule<T>(T::class.java){
override fun getActivityIntent(): Intent = intent
}
那么规则变为:
@Rule @JvmField
val rule = activityTestRuleWithIntent<QuestionnaireActivity<ProfileModel.LifeStyleInfo>>(QuestionnaireActivity.getQuestionnaireIntent(InstrumentationRegistry.getTargetContext(), 3, ProfileModel.LifeStyleInfo()))
推荐阅读
- sql - 检索最新日期预言机
- android - 如何通过下拉刷新 Expo Webview 中的页面?
- google-cloud-platform - 是否可以在 Cloud Run 服务中公开 5001 (HTTP) 和 5672 (TCP) 端口?
- pulp - 约束:我可以融化克数、卡路里和百分比作为约束吗?
- php - PHP 帮助、MySQL 和查询中的行号
- python - Convertapi 模块在调用时启动多个 tkinter 实例
- xquery - 当我尝试在 MarkLogic 中删除集合时出现超时错误
- javascript - 如何使用 React 创建表单帖子?
- swift - 为多个枚举创建一个 DRY 函数(枚举子类化?)
- javascript - 我正在删除课程并设置另一个课程,但它没有发生?