我一直在玩Espresso
测试几周,最后我决定开始测试片段。
我遇到了一个问题,如何获得当前的活动?
我的应用使用登录数据,因此无法使用测试规则启动活动。
简单地说,在进行浓缩咖啡测试时是否有类似于getActivity()
的东西?
答案 0 :(得分:18)
我通常会这样,它看起来(可能是)hacky但是,嘿,它有效
import static android.support.test.InstrumentationRegistry.getInstrumentation;
public class MyTest {
private Activity getActivityInstance(){
final Activity[] currentActivity = {null};
getInstrumentation().runOnMainSync(new Runnable(){
public void run(){
Collection<Activity> resumedActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
Iterator<Activity> it = resumedActivity.iterator();
currentActivity[0] = it.next();
}
});
return currentActivity[0];
}
}
答案 1 :(得分:1)
这里的lelloman's solution的Kotlin略有变化:
import android.app.Activity
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry
import androidx.test.runner.lifecycle.Stage
object EspressoHelper {
fun getCurrentActivity(): Activity? {
var currentActivity: Activity? = null
getInstrumentation().runOnMainSync { run { currentActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) } }
return currentActivity
}
}