在我的Android应用中,我有一个Application
类,扩展了MultiDexApplication
。我们称之为MyApplicationClass
在onCreate()
的{{1}}中,我设置了一些静态变量。然后在所有活动的MyApplicationClass.java
方法中,我使用静态方法获取这些变量。
onCreate()
现在使用Espresso框架,我正在使用以下代码编写活动的UI测试
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;
}
}
从Android Studio运行测试后,调用public class MyActivityTest{
@Rule
public ActivityTestRule activityTestRule =
new ActivityTestRule(MyActivity.class);
@Test
public void testButtonIsVisible() {
//Some Test code.
}
}
onCreate()
方法并尝试获取静态变量。但是这些变量的值是null。原因很简单。 MyActivity
的{{1}}在此过程中未被调用。
那么在Espresso中启动活动之前,如何调用应用程序类的onCreate()
方法?
P.S。关于静态变量的设置和获取,请不要建议。那是代码的要求。
答案 0 :(得分:0)
我遇到了同样的问题并花了很多时间,直到我意识到我们使用自定义的TestRunner并且使用newApplication方法。因为在测试期间我们使用另一个类来使用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);
}