espresso ActivityTestRule для действия с параметром универсального типа - PullRequest
0 голосов
/ 27 мая 2018

Я объявил подобное действие

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    

что мне делать?

спасибо за внимание

1 Ответ

0 голосов
/ 03 июня 2018

аналогично здесь решение включает определение встроенной функции, подобной этой

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()))
...