首页 > 解决方案 > 测试不便:Android Studio JUnit vs Gradle based:testOptions被Android Studio忽略

问题描述

以下是使用 Android Studio 3.4、Android Gradle Plugin 3.3.2 和 Gradle 4.10.3 完成的。

build.gradle文件中,我配置了一些单元测试选项,如下所示:

android {
  testOptions {
    unitTests.all {
      systemProperty "debug","true"
    }
  }
}

我确实有一个尝试读取此属性的测试函数:

package com.demo;
public class SysPropTestDemo {
    @Test
    public static void dumpSysProps() {
        System.out.println("sysprop(debug)=" + System.getProperty("debug"));
    }
}

通过命令行运行时,gradlew test --test com.demo.SysPropTestDemo我会将属性debug正确设置为true. 如果我通过 Android Studio 运行相同的测试而不设置任何选项,则显示的值为null.

为了从 Android Studio 获得相同的结果,我必须明确地在“运行/调试配置”面板中输入一些值,即类似于-Ddebug=trueVM 选项中的值。

现在这是一个简单的例子,但我真正想做的是为java.library.path属性添加一些路径,以便能够加载在项目中编译的 JNI 库。(我确实需要编写一些使用修改后的 SQLite 库的测试,所以这里不使用 JNI 不是一个选项)

它在设置附加选项时确实有效,但我认为这非常不方便,因为我无法在配置选项中输入基于变量的值(或者至少,我不知道如何输入)。总结一下:设置或更改值时,我确实必须经过一堆配置屏幕,我真的希望在配置文件中有一个位置。

Android Studio 不应该以某种方式使用build.gradle文件中指定的值吗?如果没有,文档并没有明确说明这些testOptions.unitTests.all设置只能通过gradlew调用来使用。

标签: androidunit-testingandroid-studiogradleandroid-gradle-plugin

解决方案


Skybow,

I feel you have two questions
1. How to load jni lib for androidTest(not for 'test[non instrumented unit tests])
   - copy your jni library in corresponding folder [JNI libraries: [app/src/androidTestFLAVORNAMEDebug/jniLibs]
   - load your jni library
     static {

                try {
                    System.loadLibrary("xyzjni");
                } catch (Exception e) {
                    Logger.error("Exception on loading the jni library : " + e.getMessage());
                }

        }

2. How to make android studio use your config variables defined for unitTests.
   - It would have great if some text file is there which has all configs.
   - Or it is part of build.gradle
   - I don't have any detail on this.

推荐阅读