使用gradle仅在一个构建变体上运行单元测试

时间:2018-08-09 20:44:59

标签: android unit-testing gradle build-variant

我有一个多维android gradle项目,该项目需要很长时间才能构建且需要很长时间进行测试。 我有一个二维的flaver定义。 第一个维度具有2个项目值,第二个维度具有4个环境定义,并且有3种构建类型。

这将导致2x4x3 = 24个构建变体。 我想以某种方式进行优化,即只构建一个构建变体,而仅一个构建变体将用于在ci环境中运行单元测试。

build.gradle

gradlew clean --refresh-dependencies

我以前会清理所有东西,     gradlew assembleDebug

然后组装Debug变体,     gradlew testAdvancedFlavorDevelopmentDebugUnitTest

,然后尝试在一种调试版本上仅运行单元测试:     gradlew test ->这不起作用

如果我运行gradlew testDebugUnitTest,则所有构建变体都已构建(例如Release版本),测试就可以了,但这需要很长时间!

也尝试gradlew test->不起作用

我认为我可以将单元测试移至另一个目录,而不是测试目录,例如testAdvancedFlavorDevelopment,然后当我输入 //locate the default truststore String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar); KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream(filename)) { keystore.load(fis, "changeit".toCharArray()); } CertificateFactory cf = CertificateFactory.getInstance("X.509"); //Input stream to cert file Certificate caCert = cf.generateCertificate(IOUtils.toInputStream(CA_CERT)); keystore.setCertificateEntry("ca-cert", caCert); //can only save to /tmp from a lambda String certPath = "/tmp/CustomTruststore"; try (FileOutputStream out = new FileOutputStream(certPath)) { keystore.store(out, "MyPass".toCharArray()); } System.setProperty("javax.net.ssl.trustStore", certPath); 时,只会启动testAdvancedFlavorDevelopmentDebug和testAdvancedFlavorDevelopmentDebugInstantRun的测试。

但是必须有一种方法可以让测试位于测试目录中,并通过gradlew命令强制执行,以便仅对一个特定的buildvariant进行编译和单元测试!有什么想法吗?

tia luke

1 个答案:

答案 0 :(得分:0)

try ./gradlew: ModuleName :test VariantName DebugUnitTest,您也可以在Gradle选项卡中找到可以执行的所有可能的UnitTest任务。

enter image description here