我正在尝试使应用程序的启动过程自动化,并且需要在每次 @Test
之前清除应用程序数据我已经实现了
public class Onboarding {
@Rule
public ActivityTestRule<AppStartActivity> mActivityTestRule = new ActivityTestRule<>(AppStartActivity.class);
@Before
public void clearPreferences() {
try {
// clearing app data
Runtime runtime = Runtime.getRuntime();
runtime.exec("pm clear packageName");
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void Mobile10DigitWithInvalidOtp () {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
OnboardingFragment onboardingFragment = new OnboardingFragment();
onboardingFragment.LoginAsExistingUserIndia("1325546852", "12345");
onboardingFragment.invalidOtpMessage.check(matches(isDisplayed()));
}
}
但是一旦运行测试就会崩溃。
测试未能完成。原因:“由于‘进程崩溃’,检测运行失败。”。检查设备 logcat 了解详细信息 测试运行失败:由于“进程崩溃”,检测运行失败。
此外,如果我在没有 @Before 的情况下运行 @Test ,它运行良好。
我应该如何实现这一点,以便在每次测试运行前清除应用数据后,我可以继续运行我的测试用例?
最佳答案
当您运行仪器测试时 - 它们与被测应用程序一起在同一个线程中运行。清除包或换句话说杀死测试线程下的应用程序也会杀死仪器测试。
可能的解决方案:
- 在使用例如
adb
命令开始仪器测试之前清除包:adb shell pm clear com.bla.bla
- 在被测应用程序中实现清理所需数据(数据库、首选项等)的方法,并从
@Before
测试方法内部调用它。
关于android - 在@Before 中清除应用程序数据后测试用例失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41997410/