我想在我的Android应用程序中运行一堆测试。事情是:我想首先定义一些测试N,并使我的应用程序运行该次数,一个接一个。
这在Android中有点棘手,因为Activities的生命周期,但我们的目标是在最后一个测试结束后立即开始一个测试(再次执行应用程序)。
这可能吗?我试着阅读Android开发者测试部分,但我对这种技术是否可能实现我想要的东西有些怀疑。
另外,我想让每个测试用不同的变量值(不同的输入)执行,但这可能更棘手,所以…让我们专注于第一个问题:)
帮忙吗? ?由于
听起来你想要的是一种机制来重新启动你的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;
}
当然,onDestroy()应该有一个机制来避免'restart'的无限循环。根Activity类的示例:
https://github.com/TakahikoKawasaki/nv-android-base/blob/master/src/main/java/com/neovisionaries/android/app/BaseRootActivity.java
实现'restart'机制的Android应用示例:
https://github.com/TakahikoKawasaki/nv-android-base-sample
你可以为你的应用运行任意数量的测试,你只需要指定有效的测试运行器。默认情况下,SDK提供了一个AndroidTestRunner,允许您在模拟器中运行应用程序的测试。
之后,您还可以使用另一个测试运行器,如robolelectric,它允许直接从您的IDE运行测试。
你可以在两种解决方案中运行尽可能多的测试,不需要在每次测试之间杀死和重新启动应用程序。尽管如此,这样做是非常低效和耗时的。
我不确定,但如果一个脚本女巫杀死你的应用程序,并重新启动它与新的输入,这可以存储在预初始化的db?Android ADB停止应用程序命令,如"force-stop"对于非根设备
您可以使用shell
命令start
和参数-e
启动应用程序:
$ adb shell am start -n com.some.package/com.some.package.MainActivity -e key param
参数将进入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上杀死应用程序,你需要有一个扎根的设备。下一个命令将终止应用程序:
$ adb shell ps | grep com.some.package | awk '{print $2}' | xargs adb shell kill
但是我确信标准的测试方法会更好。所以我建议你仔细阅读所有关于测试的Android文档