在Android测试中创建和使用Gradle或系统属性

3

我目前正在运行一系列使用

adb shell am instrument -w ${PKGNAME}.test/android.support.test.runner.AndroidJUnitRunner

从bash脚本中运行。在调试和编写这些测试时,我也会从Android Studio运行它们,因此失去了cmd行功能。

我想做的是在我的测试中设置一个系统属性或buildConfig变量,将其设置为true,并能够在我的android代码中使用它。

我似乎找不到一个gradle任务/配置来为这种类型的测试设置它。我找到的唯一接近的东西是testOptions,但这似乎仅适用于单元测试。

2个回答

0
为了仅针对androidTest / instrumentation / 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);
    }
};

-1
完美的解决方案是找出如何避免在代码中知道当前是否处于测试中。您没有解释为什么需要此信息,请查看Comtaler对类似问题的回答。这可能正是您所需要的。

所以,我因为沉浸模式而感到困扰。我在我的测试中使用UiAutomator和UiDevice,但是当使用沉浸模式时,UiDevice无法获取全屏大小。我有需要点击的按钮在导航菜单下方。我想在测试中关闭沉浸模式,这样我的测试就可以正常运行。 - Russ Wheeler
另外,我不确定这是否有帮助,因为在运行沉浸式测试时会使用2个APK。我的原始应用程序和一个针对其运行的测试APK。因此,设置沉浸模式的应用程序在包名称中不会有“.test”。 - Russ Wheeler
但是,现在我想想,我不确定我的应用程序是否有任何方法知道它是否正在运行测试apk,所以也许这一切都是不可能的... - Russ Wheeler
请确保添加任何其他可能对希望回答原始问题的人有帮助的信息。您所说的“针对其运行的测试apk”是什么意思? - neits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接