在 Android 测试中创建和使用 gradle 或系统属性
Posted
技术标签:
【中文标题】在 Android 测试中创建和使用 gradle 或系统属性【英文标题】:Create and use a gradle or system property in Android Tests 【发布时间】:2017-10-02 23:46:59 【问题描述】:我目前正在使用
运行一套测试adb shell am instrument -w $PKGNAME.test/android.support.test.runner.AndroidJUnitRunner
来自 bash 脚本。另外,在调试和编写这些测试时,我也是从 Android Studio 运行它们,所以我失去了命令行能力。
我想做的是拥有一个系统属性或 buildConfig 变量,我只能在我的测试中设置为 true,并且能够在我的 android 代码中使用它。
我似乎找不到一个 gradle 任务/配置来为这种类型的测试设置这个。我发现唯一接近的是 testOptions,但这似乎只适用于单元测试。
【问题讨论】:
【参考方案1】:完美的解决方案是弄清楚如何避免在代码中知道您当前是否正在测试。您没有解释为什么需要此信息,因此请查看 Comtaler's answer to a similar question。这可能正是您所需要的。
【讨论】:
所以,这是因为我在沉浸式模式中苦苦挣扎。我在测试中使用了 UiAutomator 和 UiDevice,但是在使用沉浸式模式时,UiDevice 无法获得全屏尺寸。我有需要单击的按钮,这些按钮位于导航菜单的下方。我想在测试中做的是关闭沉浸式模式,以便我的测试能够正常运行 另外,我不确定这是否有帮助,因为当我运行沉浸式测试时,使用了 2 个 apk。我的原始应用程序,以及一个针对它运行的测试 apk。因此,设置沉浸式模式的应用程序不会有 .test。在包名中 但实际上,现在我想起来了,我不确定我的应用是否有办法知道它是否正在针对测试 apk 运行,所以也许这一切都是不可能的。 .. 请务必添加该信息以及任何其他可能对希望回答原始问题的人有所帮助的信息。你到底是什么意思“测试 apk 运行它”?【参考方案2】:要仅为 androidTest / instrumantation / espresso 测试更改一些设置,我想出了以下解决方案:
//DbHelper
public class DbHelper extends SQLiteOpenHelper
public static AtomicBoolean isTestMode = new AtomicBoolean(false);
private static String getDBName()
if (isTestMode.get())
return null; // use in memory sqlite db
else
return DB_NAME;
// within my unit test
@Rule
public ActivityTestRule<MyActivity> mActivityRule = new ActivityTestRule<MyActivity>(
MyActivity.class)
@Override
protected void beforeActivityLaunched()
super.beforeActivityLaunched();
DbHelper.isTestMode.set(true);
@Override
protected void afterActivityFinished()
super.afterActivityFinished();
DbHelper.isTestMode.set(false);
;
【讨论】:
以上是关于在 Android 测试中创建和使用 gradle 或系统属性的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 Android 中创建和读取 WEP/EAP WiFi 配置?
如何在 Protractor 中创建和操作 Promise?