Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否有方法将类变量传递给Espresso ActivityTestRule?_Android_Kotlin_Android Intent_Android Espresso - Fatal编程技术网

Android 是否有方法将类变量传递给Espresso ActivityTestRule?

Android 是否有方法将类变量传递给Espresso ActivityTestRule?,android,kotlin,android-intent,android-espresso,Android,Kotlin,Android Intent,Android Espresso,我正在为使用浓缩咖啡的活动编写测试。对于每个活动,测试都是这样的 @RunWith(AndroidJUnit4::class) class TestSomeActivity { @get:Rule var activityTestRule = ActivityTestRule(SomeActivity::class.java, true, false) @Test fun testNullIntent() { val intent = Intent

我正在为使用浓缩咖啡的活动编写测试。对于每个活动,测试都是这样的

@RunWith(AndroidJUnit4::class)
class TestSomeActivity {
    @get:Rule
    var activityTestRule = ActivityTestRule(SomeActivity::class.java, true, false)
    @Test
    fun testNullIntent() {
        val intent = Intent()
        activityTestRule.launchActivity(intent)
    }
}
这样做的目的是,每当该活动中的意图调用
Intent.getExtra
,就会返回
null

问题是,如果我们要为每一个活动检查这一点,除了这一行之外,必须编写相同的代码-

@get:Rule
var activityTestRule = ActivityTestRule(SomeActivity::class.java, true, false)
为了解决这个问题,我使用
PackageManager
获得了所有活动的名称,并将它们转换为
Class
。然后,我尝试将该类传递给我的
activityTestRule

val intent = Intent()
val activityInfoList = getAllActivities()
for(activityInfo in activityInfoList!!) {
    val className = activityInfo.applicationInfo.className
    val activityClass = Class.forName(className)
    val activityTestRule = ActivityTestRule(activityClass.javaClass, true, false)
    activityTestRule.launchActivity(intent)
}
不幸的是,这导致了编译时错误-

None of the following functions can be called with the arguments supplied.
<init>(SingleActivityFactory<T!>!, Boolean, Boolean)   where T cannot be inferred for    constructor ActivityTestRule<T : Activity!>(activityFactory: SingleActivityFactory<T!>!, initialTouchMode: Boolean, launchActivity: Boolean) defined in androidx.test.rule.ActivityTestRule
<init>(Class<T!>!, Boolean, Boolean)   where T cannot be inferred for    constructor ActivityTestRule<T : Activity!>(activityClass: Class<T!>!, initialTouchMode: Boolean, launchActivity: Boolean) defined in androidx.test.rule.ActivityTestRule
这消除了编译时错误,但引入了
java.lang.ClassCastException:java.lang.Class不能强制转换为android.app.Activity


有没有办法为类中的所有活动运行相同的浓缩咖啡脚本,或者将
传递给ActivityTestRule?

而不是这段代码

val activityClass = Class.forName(className) as Activity
您可以使用以下命令

val activityClass = Class.forName(className) as Class<Activity>
val activityClass=Class.forName(className)作为类
这将确保不会出现编译时错误,并且在运行代码后不会发生类型转换异常

val activityClass = Class.forName(className) as Class<Activity>