Android:多次运行应用程序

时间:2014-03-27 12:00:43

标签: android testing android-activity android-testing

我想在我的Android应用程序中运行一堆测试。 问题是:我想首先定义一些测试 N ,然后让我的应用程序一次又一次地运行。

由于活动生命周期,它在Android中有点棘手,但目标是在最后一次停止后立即开始测试(再次执行应用程序)。

这可能吗?我尝试阅读Android Developers Testing section,但我对这种技术是否可能产生了一些疑问。

另外,我想让每个测试用不同的变量值(不同的输入)执行,但这可能更棘手,所以......让我们关注第一个问题:)

任何帮助?感谢

4 个答案:

答案 0 :(得分:1)

您可以为您的应用程序运行任意数量的测试,您只需指定有效的测试运行器。默认情况下,SDK提供AndroidTestRunner,允许您在模拟器中为应用运行测试。

之后,您还可以使用另一个允许直接从IDE运行测试的Robolectric测试运行器。

您可以使用两种解决方案按需运行测试,无需在每次测试之间杀死并重新启动应用程序。尽管如此,这样做会非常低效和耗时。

答案 1 :(得分:1)

对我来说,你想要的是一种以编程方式(优雅地)重新启动Android应用程序的机制。很多人可能会说这是不可能的,但你可以实施这个机制。

基本流程是:

(1)完成()您的根活动。

(2)在根活动的onDestroy()中,调用startActivity(createMainLauncherIntent())。

(3)createMainLauncherIntent()的实现应如下所示。

private Intent createMainLauncherIntent()
{
    Intent intent = new Intent();

    // To launch this activity as if it started from the launcher.
    intent.setClass(this, getClass());
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    return intent;
}

(4)当然,onDestroy()应该有一个机制来避免重启'

的无限循环。

基础活动类的示例:
https://github.com/TakahikoKawasaki/nv-android-base/blob/master/src/main/java/com/neovisionaries/android/app/BaseRootActivity.java

实施'重启'的示例Android应用程序机制:
https://github.com/TakahikoKawasaki/nv-android-base-sample

答案 2 :(得分:0)

我不确定,但是一个脚本巫婆会杀死你的应用并再次使用新输入启动它,可以存储在预初始化的数据库中? 这里有一个如何杀死你的应用程序的链接:Android ADB stop application command like "force-stop" for non rooted device

答案 3 :(得分:0)

您可以使用shell命令start和参数-e启动带有参数的应用:

$ adb shell am start -n com.some.package/com.some.package.MainActivity -e key param

Params将采用onCreate方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Bundle extras = this.getIntent().getExtras();
    if(extras != null){
        String key = extras.getString("key");
    }
}

要在Android上杀死app,你需要拥有root设备。下一个命令将终止app:

$ adb shell ps | grep com.some.package | awk '{print $2}' | xargs adb shell kill

但我确信标准测试方法会更好。因此,我建议您仔细阅读有关测试的所有Android文档。