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

时间:2017-10-02 23:46:59

标签: android gradle android-instrumentation system-properties

我目前正在使用

运行一系列测试
adb shell am instrument -w ${PKGNAME}.test/android.support.test.runner.AndroidJUnitRunner
来自bash脚本。此外,在调试和编写这些测试时,我也从Android Studio运行它们,因此我失去了cmd行能力。

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

我似乎找不到一个gradle task / config来为这种类型的测试设置它。我发现唯一关闭的是testOptions,但这似乎只适用于单元测试。

2 个答案:

答案 0 :(得分:0)

完美的解决方案是弄清楚如果您目前正在进行测试,如何避免必须知道代码。您没有解释为何需要此信息,请查看Comtaler's answer to a similar question。这可能正是你所需要的。

答案 1 :(得分:0)

要仅为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);
    }
};