Android 如何在使用Espresso运行活动测试时调用onCreate应用程序类
在我的Android应用程序中,我有一个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
应用程序
类,它扩展了多索引应用程序
。让我们称之为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);
}