Android Espresso集成测试:如何在Activity的onCreate前执行代码?
解决Activity onCreate前执行测试前置代码的问题
你遇到的问题本质是ActivityScenarioRule默认会在@Before方法执行之前就自动启动Activity,导致@Before里的代码赶不上onCreate的执行时机。可以通过手动控制Activity的启动时机来解决:
方案一:修改ActivityScenarioRule的使用方式
不用默认的自动启动构造,改用无参构造,然后在@Before里先执行前置代码,再手动启动Activity:
// 定义Rule时不指定启动类,避免自动启动 public ActivityScenarioRule<MyActivity> activityScenarioRule = new ActivityScenarioRule<>(); @Before public void setup() { // 这里写你需要在onCreate之前执行的代码,比如Mock依赖、初始化测试数据 mockServiceDependencies(); setupTestData(); // 手动启动Activity,此时onCreate会在上述代码之后执行 activityScenarioRule.launch(MyActivity.class); }
方案二:直接使用ActivityScenario手动管理生命周期
如果不需要依赖Rule的自动管理,也可以直接创建ActivityScenario,完全掌控启动时机:
private ActivityScenario<MyActivity> activityScenario; @Before public void setup() { // 先执行所有前置逻辑 preOnCreatePreparation(); // 启动Activity activityScenario = ActivityScenario.launch(MyActivity.class); } @After public void teardown() { // 测试结束后关闭Activity activityScenario.close(); }
这两种方式都是把Activity的启动时机从Rule的自动触发阶段,推迟到你完成前置代码之后,确保前置逻辑在MyActivity.onCreate()执行前全部完成。
内容的提问来源于stack exchange,提问作者lastpeony4
相关产品推荐
相关产品推荐

