前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android Gradle 插件】TestOptions 配置 ④ ( org.gradle.api.tasks.testing.Test 单元测试配置类 | Android 单元测试示例 )

【Android Gradle 插件】TestOptions 配置 ④ ( org.gradle.api.tasks.testing.Test 单元测试配置类 | Android 单元测试示例 )

作者头像
韩曙亮
发布2023-03-30 15:46:42
1.3K0
发布2023-03-30 15:46:42
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

Android Plugin DSL Reference 参考文档 :

一、org.gradle.api.tasks.testing.Test 单元测试配置类


UnitTestOptions ( build.gradle#android#testOptions#unitTests ) 文档位置 : android-gradle-dsl/2.3/com.android.build.gradle.internal.dsl.TestOptions.UnitTestOptions.html

org.gradle.api.tasks.testing.Test 单元测试配置类 : https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/Test.html

1、Test 单元测试配置回顾

在上一篇博客 【Android Gradle 插件】TestOptions 配置 ③ ( TestOptions#unitTests 脚本块配置 | UnitTestOptions 配置简介 ) 中 , 参考文档 https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/testing/Test.html , 有如下单元测试配置示例 ;

Gradle 中 Test 单元测试配置类参考 :

代码语言:javascript
复制
 plugins {
     id 'java' // adds 'test' task
 }

 test {
   // Discover and execute JUnit4-based tests
   useJUnit()

   // Discover and execute TestNG-based tests
   useTestNG()

   // Discover and execute JUnit Platform-based tests
   useJUnitPlatform()

   // set a system property for the test JVM(s)
   systemProperty 'some.prop', 'value'

   // explicitly include or exclude tests
   include 'org/foo/**'
   exclude 'org/boo/**'

   // show standard out and standard error of the test JVM(s) on the console
   testLogging.showStandardStreams = true

   // set heap size for the test JVM(s)
   minHeapSize = "128m"
   maxHeapSize = "512m"

   // set JVM arguments for the test JVM(s)
   jvmArgs '-XX:MaxPermSize=256m'

   // listen to events in the test execution lifecycle
   beforeTest { descriptor ->
      logger.lifecycle("Running test: " + descriptor)
   }

   // Fail the 'test' task on the first test failure
   failFast = true

   // listen to standard out and standard error of the test JVM(s)
   onOutput { descriptor, event ->
      logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
   }
 }

2、启动单元测试

启用 TestNG 支持 , 也就是启用 单元测试 , 默认的单元测试类型是 JUnit 单元测试 ;

代码语言:javascript
复制
useTestNG()

3、设置 JVM 系统属性

为测试的 Java 虚拟机 ( JVM ) 设置系统属性 , Gradle 中的单元测试 运行在独立的 JVM 虚拟机中 ,

代码语言:javascript
复制
   // set a system property for the test JVM(s)
   systemProperty 'some.prop', 'value'

上述设置了 JVM 系统属性值 , 可以通过

代码语言:javascript
复制
System.getProperty("some.prop") 

代码 , 在 单元测试 类中 , 获取该 ‘some.prop’ 对应的 ‘value’ 值 ;

4、打开命令行标准输出

如果想要在 Console 命令行中查看测试过程 , 需要开启 Java 虚拟机的 标准输出 和 标准错误 ;

代码语言:javascript
复制
   // show standard out and standard error of the test JVM(s) on the console
   testLogging.showStandardStreams = true

二、单元测试示例


单元测试类

单元测试类如下 :

代码语言:javascript
复制
package kim.hsl.svg

import org.junit.Test

import org.junit.Assert.*

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
        System.out.println(System.getProperty("some.prop"))
    }
}

gradle 配置

build.gradle 配置如下 :

代码语言:javascript
复制
plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {

    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "kim.hsl.svg"
        minSdkVersion 18
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        // 生成 PNG 图片配置
        //generatedDensities = ['hdpi', 'mdpi', 'xhdpi',  'xxhdpi', 'xxxhdpi']

        // 使用 com.android.support:appcompat 支持库配置
        vectorDrawables.useSupportLibrary = true

        // 国际化资源配置, 只打包默认资源与英文资源
        resConfigs 'en'

        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
        }

        buildConfigField("boolean", "isGooglePlay", "true")
        buildConfigField("String", "market", '"GooglePlay"')

        //applicationIdSuffix ".tom"
    }

    signingConfigs {
        mySigningConfig {
            storeFile file("debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }

    buildTypes {
        release {
            // 是否开启优化混淆
            minifyEnabled true
            // 是否启用资源压缩 , 未使用的资源会被优化
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            multiDexEnabled true
            multiDexKeepFile file('keep_in_main.txt')
        }
    }

    // 配置资源编译工具 aapt
    aaptOptions {
        // aapt 附加参数
        //additionalParameters '-S', 'src/main/res2', '--auto-add-overlay'
    }

    lintOptions {
        // 编译时遇到错误, 停止编译
        abortOnError false
    }

    sourceSets {
        main {
            res.srcDirs 'src/main/res', 'src/main/res2'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    buildFeatures {
        dataBinding = true
    }

    testOptions {
        animationsDisabled true
        unitTests.all {
            // 设置 JVM 系统属性
            systemProperty 'some.prop', 'value'
            // 开启标准化化输出
            testLogging.showStandardStreams = true
        }
    }
}

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'

    // 矢量图支持库 , 支持 5.0 以下版本手机使用矢量图 , 这个是创建应用时自带的配置
    implementation 'androidx.appcompat:appcompat:1.2.0'

    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

1、右键运行单元测试

在单元测试类中 , 鼠标右键点击单元测试方法名 , 即可执行该方法 ;

注意 : 在单元测试类中 , 点击右键运行不会生成测试报告 ,

执行结果 :

3、执行单元测试 Gradle 任务

标准的单元测试 , 需要在 Terminal 中执行

代码语言:javascript
复制
gradlew :app:testDebugUnitTest

命令 , 执行单元测试 , 并在命令行输出结果 , 最终生成测试报告 ;

执行上述命令 , 即可开始进行单元测试 ;

4、查看单元测试命令行输出

执行时会在 Terminal 终端中打印出 systemProperty 'some.prop', 'value' 配置的 JVM 系统属性 ;

代码语言:javascript
复制
Y:\002_WorkSpace\001_AS\SVG>gradlew :app:testDebugUnitTest

> Task :app:testDebugUnitTest

kim.hsl.svg.ExampleUnitTest > addition_isCorrect STANDARD_OUT
    value

BUILD SUCCESSFUL in 9s
21 actionable tasks: 2 executed, 19 up-to-date
Y:\002_WorkSpace\001_AS\SVG>

5、查看单元测试报告

单元测试报告生成路径 : app/build/reports/androidTests/connected/flavors/debugAndroidTest/kim.hsl.svg.ExampleInstrumentedTest.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、org.gradle.api.tasks.testing.Test 单元测试配置类
    • 1、Test 单元测试配置回顾
      • 2、启动单元测试
        • 3、设置 JVM 系统属性
          • 4、打开命令行标准输出
          • 二、单元测试示例
            • 单元测试类
              • gradle 配置
                • 1、右键运行单元测试
                  • 3、执行单元测试 Gradle 任务
                    • 4、查看单元测试命令行输出
                      • 5、查看单元测试报告
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档