Android 单元测试初体验

这篇具有很好参考价值的文章主要介绍了Android 单元测试初体验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Android 单元测试初体验,Android基础,android,单元测试

前言

当初在学校学安卓的时候,老师敢教学进度,翻到单元测试这一章节的时候提了两句,没有把单元测试当重点讲,只是说我们工作中几乎不会用到,果真在之前的几年工作当中我真的没有用到,工作中都没有写过单元测试,后来我自己也下意识的忽略了这一块,直到听说现在这家公司后面会要求单元测试用例覆盖率达到百分之七十。我开始慌了,单元测试什么的,国内真的不太重视,这不,抽个周末简单学习下。对于安卓的单元测试的话,现在新建一个项目可以看到都是用的Junit4,ps:涉及Compose的单元测试本文不会过多解释。

这是官网 https://junit.org/junit4/


一、单元测试是什么?

安卓的单元测试是一种针对应用程序中的最小可测试单元——即单个函数、方法或逻辑模块——进行测试的策略。它专注于验证每个独立单元的特定功能和行为,以确保代码的正确性。

单元测试的目的是提高代码质量,减少bug,提高软件可靠性,同时降低维护成本。它是最为基础的测试形式,能够快速反馈问题,定位错误,并且在开发周期中尽早发现并解决问题,从而避免问题随着时间的推移而变得更加复杂。

虽然单元测试可能看起来很麻烦,但它的价值是无可替代的。通过单元测试,开发人员可以:

  1. 验证每个单元的功能是否符合预期;
  2. 检测代码中的潜在错误和漏洞;
  3. 确保代码在各种条件下都能正常运行;
  4. 提高代码的可读性和可维护性;
  5. 为代码重构提供安全保障。

在安卓开发中,由于其环境复杂性和多样性,单元测试尤为重要。通过单元测试,开发者可以更加自信地修改和优化代码,同时确保用户在使用应用程序时能够获得稳定、可靠的性能。虽然初始的投入可能会让人们觉得麻烦,但随着时间的推移,你会发现它在提高开发效率和保障应用程序质量方面具有巨大的优势。虽然单元测试可能会增加一些开发的初始工作量,但它能够为提高软件质量、减少后期维护成本提供强有力的支持。对于安卓开发来说,学会如何有效地进行单元测试,将是非常重要的一步。

二、简单使用

1.依赖

代码如下(示例):

dependencies {

    implementation("androidx.core:core-ktx:1.9.0")
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")
    implementation("androidx.activity:activity-compose:1.7.0")
    implementation(platform("androidx.compose:compose-bom:2023.03.00"))
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")
    debugImplementation("androidx.compose.ui:ui-tooling")
    debugImplementation("androidx.compose.ui:ui-test-manifest")
}

上面的是新建一个Compose项目的依赖,有Compose的物料库,我们的测试相关依赖带主要是下面几个

	testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")
    debugImplementation("androidx.compose.ui:ui-tooling")
    debugImplementation("androidx.compose.ui:ui-test-manifest")

我将为你解释每一行的作用:

  1. testImplementation("junit:junit:4.13.2")

    • 这是用于单元测试的依赖。JUnit是Java中广泛使用的单元测试框架,4.13.2是它的版本号。当你写单元测试时(通常在src/test/java目录下),JUnit为你提供了注解、断言等测试工具。
  2. androidTestImplementation("androidx.test.ext:junit:1.1.5")

    • 这是Android测试专用的JUnit扩展库。它提供了Android特定的功能,例如运行测试前的设备初始化等。
  3. androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

    • Espresso是Android的测试框架,用于编写UI测试。它允许你模拟用户交互行为,如点击、滑动等,并验证应用的状态。espresso-core是Espresso的核心库。
  4. androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))

    • 这是关于Android Jetpack Compose的依赖。Compose是Android的现代UI工具包,用于构建原生的UI。这一行导入了一个Bill of Materials (BOM)平台,它可以帮助管理和解析Compose相关的库版本。通过使用BOM,开发者可以确保他们使用的所有Compose库版本都是相互兼容的。
  5. androidTestImplementation("androidx.compose.ui:ui-test-junit4")

    • 这是为Jetpack Compose UI测试提供的JUnit4支持库。如果你使用Compose构建UI并希望进行UI测试,这个库会很有用。
  6. debugImplementation("androidx.compose.ui:ui-tooling")

    • 这是Compose的工具库,通常在debug版本中使用。它为开发者提供了检查、诊断和与Compose UI交互的功能。例如,当你在模拟器或连接的设备上运行应用时,这个库可以帮助你在开发工具中预览和检查Compose UI。
  7. debugImplementation("androidx.compose.ui:ui-test-manifest")

    • 这个库提供了为Compose UI测试所需的AndroidManifest.xml中的配置和权限。当你在debug模式下运行应用时,这些配置和权限可以确保测试的顺利运行。

这些依赖确保我们的Android项目拥有进行单元测试和Android设备测试所需的所有工具和框架。

2.单元测试代码简单模版及解释

有了上面的依赖,我们就可以开始写一些简单的单元测试代码了。我们先看下项目结构

Android 单元测试初体验,Android基础,android,单元测试
上面的androidTest包下是涉及一些页面测试的,我们本文先从单元测试开始,所以就在test包下的ExampleUnitTest.kt下编写代码就好。

代码如下(示例):

package com.example.mytest

import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test


/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
class ExampleUnitTest {

    private var emptyList: List<*>? = null

    /**
     * Sets up the test fixture.
     * (Called before every test case method.)
     */
    @Before
    fun setUp() {
        emptyList = ArrayList<Any?>()
    }

    /**
     * Tears down the test fixture.
     * (Called after every test case method.)
     */
    @After
    fun tearDown() {
        emptyList = null
    }

    @Test
    fun testSomeBehavior() {
        assertEquals("Empty list should have 0 elements", 0, emptyList!!.size)
    }

    @Test(expected = IndexOutOfBoundsException::class)
    fun testForException() {
        val o = emptyList!![0]!!
    }


}

先讲注解

  • @Test注解:告诉 Junit4 他是一个测试方法。
  • @Before 注解:在每执行一个带有@Test注解的方法之前带有@Before 注解的方法都会执行。
  • @After 注解:在每执行一个带有@Test注解的方法之后带有@After注解的方法都会执行。
    …注解有很多哟,这里只是简单介绍几个

再讲方法

  • assertEquals (描述,需要对比的值1,需要对比的值2) 如果需要对比的值1和需要对比的值2不相等则抛出异常

Android 单元测试初体验,Android基础,android,单元测试

@Test(expected = IndexOutOfBoundsException::class)
expected 表示如果不抛出 IndexOutOfBoundsException这个异常,则方法执行失败


总结

最后我们运行一下,测试通过本文完结!

Android 单元测试初体验,Android基础,android,单元测试
Android 单元测试初体验,Android基础,android,单元测试文章来源地址https://www.toymoban.com/news/detail-773100.html

到了这里,关于Android 单元测试初体验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 单元测试之 Mockk

    relaxed : 是否对其代码进行依赖,默认为否,这个参数比较关键,后续会更细的讲解一下 moreInterfaces : 让这个mock出来的对象实现这些声明的接口 relaxUnitFun :和 relaxed 差不多,但是只针对于 返回值是Unit 的方法, 后续会讲解一下 block : 该语句块表示你在创建完 mock 对象后

    2024年02月02日
    浏览(23)
  • Android Studio系列-Activity单元测试,字节Android高级岗

    新建Activity单元测试类 =============== package com.devilwwj.unittestdemo; import android.content.Intent; import android.test.ActivityUnitTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.widget.Button; /** Created by wwj_748 on 2016/2/22.17.12 */ public class LoginActivityTest extends ActivityUnitTestCase { private Inten

    2024年04月25日
    浏览(55)
  • Android 单元测试框架 JUnit 4

    JUnit 4测试框架,它是Java中广泛使用的单元测试框架之一,使开发者能够编写可重复、可维护和可验证的测试。 单元测试是针对代码中的个别单元或组件进行测试,可以包括以下方面: 功能测试:测试代码单元是否按照预期执行功能。 边界测试:测试代码单元响应不同的边

    2024年02月15日
    浏览(44)
  • Android单元测试系列(3)-Mock之Mockito

    目录 一、官网 二、Demo示例 1. 目录结构 2. 被测试的类 3. 测试类 三、Mockito方法说明 1. mock对象创建 2. Mockito框架中的常见方法说明 2.1 常见的打桩方法 2.2 常见的验证行为 2.3 其他方法  3. Mockito的局限性 Mockito: https://github.com/mockito/mockito Mockito (Mockito 4.4.0 API) 为什么要用mock:

    2023年04月15日
    浏览(33)
  • Android单元测试系列(3)-Mock之PowerMock

    目录 一、官网 二、Demo示例  三、PowerMock常用的测试方法 1. Private 1.1 私有变量 1.2 私有方法 2. Final 3. Static Android单元测试系列(3)-Mock之Mockito_Chris_166的博客-CSDN博客 Android单元测试系列(1)-开篇_Chris_166的博客-CSDN博客 这两篇中已经分别介绍过Mockito的使用和局限性,本篇将介绍P

    2023年04月08日
    浏览(33)
  • 【Android】JUnit和Espresso单元测试新手快速入门

    引入依赖 Java代码测试 点击被Test标注的方法,左侧的运行按钮,就可以执行测试任务 AndroidUI测试 点击被Test标注的方法,左侧的运行按钮,就可以执行测试任务 查看测试报告 测试任务执行完毕,会在app/build/reports目录下生成测试报告 报告会统计所有测试任务的执行结果,已

    2024年02月11日
    浏览(36)
  • Android 单元测试只看这一篇就够了

    目录 单元测试的目的以及测试内容 本地测试 1. 添加依赖,google官方推荐: 2. 单元测试代码存储位置: 3. 创建测试类: 4. 运行测试用例: 5. 通过模拟框架模拟依赖,隔离依赖: 仪器化测试 配置: 例子: 常用单元测试开源库 1. Mocktio 2. powermock 3. Robolectric 实践经验 1. 代码中用到了

    2024年02月03日
    浏览(46)
  • 安卓高级工程师面试题,Android 仪器化单元测试(1),ndk开发入门

    配置 build.gradle 依赖 dependencies { androidTestImplementation ‘androidx.test🏃1.4.0’ androidTestImplementation ‘androidx.test:rules:1.4.0’ } android { defaultConfig { testInstrumentationRunner “androidx.test.runner.AndroidJUnitRunner” } } 测试样例 测试代码 本例子参考 google 官方网站。因为官网里面很多类没有给到

    2024年04月16日
    浏览(43)
  • Android初体验

    Android 是一个适用于移动设备的开源操作系统,也是由 Google 主导的对应开源项目。 最初,Android只在移动设备中流行与IOS二分天下。后来,随着时代的发展、芯片性能的逐步提升以及汽车对敏捷快速迭代的要求,Android在车载娱乐系统独霸天下。 随着国内程序员的增多及迫切

    2024年02月09日
    浏览(29)
  • Android开发初体验

    创建项目 geoquiz 选择 EmptyActivity 编程语言选择 Kotlin 修改 app/src/main/java/MainActivity.kt 修改 app/src/main/res/layout/activity_main.xml 修改 app/src/main/res/values/strings.xml 设置AVD模拟器,运行项目 添加更多的题目 新增 app/src/main/java/Question.kt 修改 app/src/main/res/layout/activity_main.xml 修改 app/src/ma

    2024年02月15日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包