Android 如何在使用Espresso运行活动测试时调用onCreate应用程序类

Android 如何在使用Espresso运行活动测试时调用onCreate应用程序类,android,android-espresso,Android,Android Espresso,在我的Android应用程序中,我有一个应用程序类,它扩展了多索引应用程序。让我们称之为MyApplicationClass在MyApplicationClass.java的onCreate()中,我设置了一些静态变量。然后在所有活动的onCreate()方法中,我使用静态方法获取这些变量 public class MyApplicationClass extends MultiDexApplication { private static String value; public

在我的Android应用程序中,我有一个
应用程序
类,它扩展了
多索引应用程序
。让我们称之为
MyApplicationClass
MyApplicationClass.java
onCreate()
中,我设置了一些静态变量。然后在所有活动的
onCreate()
方法中,我使用静态方法获取这些变量

public class MyApplicationClass extends MultiDexApplication {

  private static String value;

  public static void setValue(String value) {
    MyApplicationClass.value = value;
  }

  public static String getValue() {
    return MyApplicationClass.value;
  }
}
现在使用Espresso框架,我正在使用以下代码为活动编写UI测试

public class MyActivityTest{

  @Rule
  public ActivityTestRule activityTestRule =
      new ActivityTestRule(MyActivity.class);

  @Test
  public void testButtonIsVisible() {
     //Some Test code.
  }
}
从Android Studio运行测试后,调用
MyActivity
onCreate()
方法,并尝试获取静态变量。但是这些变量的值是空的。原因相当简单<
MyApplicationClass.java
的code>onCreate()在此过程中未被调用

那么,在启动浓缩咖啡中的活动之前,如何调用应用程序类的
onCreate()
方法呢


另外,请不要对静态变量的设置和获取提出建议。这就是代码的要求。

我也遇到了同样的问题,花了很多时间,直到我意识到我们使用了定制的TestRunner并验证了新的应用程序方法。因此,在测试过程中,我们使用另一个类作为应用程序的empry onCreate方法。 一旦切换到默认的TestRunner,应用程序中的onCreate就会按预期执行

@Override
@NonNull
public Application newApplication(@NonNull ClassLoader cl,
                                  @NonNull String className,
                                  @NonNull Context context)
        throws InstantiationException,
        IllegalAccessException,
        ClassNotFoundException {

    return super.newApplication(cl,TestPLayerApplication.class.getName(), context);
}

我也遇到了同样的问题,花了很多时间,直到我意识到我们使用了一个定制的TestRunner并验证了新的应用程序方法。因此,在测试过程中,我们使用另一个类作为应用程序的empry onCreate方法。 一旦切换到默认的TestRunner,应用程序中的onCreate就会按预期执行

@Override
@NonNull
public Application newApplication(@NonNull ClassLoader cl,
                                  @NonNull String className,
                                  @NonNull Context context)
        throws InstantiationException,
        IllegalAccessException,
        ClassNotFoundException {

    return super.newApplication(cl,TestPLayerApplication.class.getName(), context);
}