我正在尝试自动化应用的入职流程,并且需要在每个之前清除应用数据 @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()));
}
}
但是一旦这个测试崩溃了。
测试无法运行完成。原因:&#39;仪表运行因“进程崩溃”而失败。&#39;&#39;。检查设备logcat以获取详细信息 测试运行失败:由于“进程崩溃”导致仪表运行失败。&#39;
如果我在没有@Before 的情况下运行@Test,它运行正常。
我应该如何实现这一点,以便在每次测试运行之前清除应用数据后继续运行我的测试用例?
答案 0 :(得分:1)
当您运行检测测试时 - 它们与同一线程中的测试下的应用程序一起运行。清除包或换句话说,在测试线程下杀死应用程序也会导致检测测试。
可能的解决方案:
adb
命令启动检测测试之前清除包:
adb shell pm clear com.bla.bla
@Before
测试方法中调用它。答案 1 :(得分:0)
您可以使用 Android Test Orchestrator。
https://developer.android.com/training/testing/junit-runner#using-android-test-orchestrator
要使用 Gradle 命令行工具启用 Android Test Orchestrator,请将以下语句添加到项目的 build.gradle 文件中:
android {
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
dependencies {
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestUtil 'androidx.test:orchestrator:1.1.0'
}