IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android测试之Junit(三) -> 正文阅读

[移动开发]Android测试之Junit(三)

一、前言

? 上篇文章讲述了单元测试Junit的基本用法,在日常工作中,上篇的文章差不多就够用了。不过出于一些特殊的情况,这里对其它一些不常用的用法做下记录。

二、其它注解

  • @Ignore 忽略测试,标注在函数上那么运行时候就会在运行测试的时候忽略该函数,标注在类上就会忽略这个类的所有测试,简单示例如下:

    import org.junit.Test
    
    import org.junit.Before
    import org.junit.Ignore
    
    /**
     * Example local unit test, which will execute on the development machine (host).
     *
     * See [testing documentation](http://d.android.com/tools/testing).
     */
    @Ignore
    class ExampleUnitTest {
    
        @Before
        fun before(){
    
        }
        @Ignore
        @Test
        fun test1() {
            println("这是测试函数1")
        }
        @Test
        fun test2() {
            println("这是测试函数2")
        }
    }
    
  • @Test(expected = NullPointerException::class)

    这个是对异常进行测试,如果测试用例没有抛出该异常则测试不通过,简单示例如下:

     @Test(expected = NullPointerException::class)
        fun test1() {
            val str: String ?= null
            val size = str!!.length
        }
    
  • @Test(timeout = 500)

    这个注释是对超时进行测试,倘若函数运行时间超过指定时间则会抛出异常,示例如下:

     @Test(timeout = 500)
        fun test1() {
            Thread.sleep(300)
        }
    

三、执行测试

? 一般来说IDE都可以自动识别被@Test标注的代码,可以很方便的进行运行。但是不排除一些开发工具用不了这种方式,所以这里使用最原始的代码方式进行运行,熟悉命令行的,可以使用命令行运行一个java文件。对于java来说入口为main函数。需要注意的是在Android Studio中,新版本和比较旧的几个版本可以在类中直接运行main函数,中间有几个版本是无法运行main函数的。示例如下:

class TestRunner {
    companion object{
        @JvmStatic
        fun main(args: Array<String>) {
            val result: org.junit.runner.Result = JUnitCore.runClasses(TestExampleJunit::class.java)
            for (failure in result.getFailures()) {
                println(failure.toString())
            }
            System.out.println(result.wasSuccessful())
        }
    }
}

class TestExampleJunit {
    var message = "Hello World"

    @Test
    fun testPrintMessage() {
        Assert.assertEquals(message, "Hello "+"World")
    }
}

可以看出这里是通过main函数的运行来看到结果。其运行结果依然在Run运行的窗口。只是会缺少很多测试的工具可以使用,被当做了一个纯粹的普通java函数来处理

四、套件测试

? 套件测试可以一次运行多个测试类,如果不依赖于IDE的话可以使用这种方式进行多个单元测试类的测试。如下:

@RunWith(Suite::class)
@Suite.SuiteClasses(value = [JunitTestOne::class, JunitTestTwo::class])
class AllTests {
}

class JunitTestOne {
    @Test()
    fun test() {
        println("测试一。。。")
        Assert.assertTrue(true)
    }
}

class JunitTestTwo {
    @Test
    fun test() {
        println("测试二。。。")
        Assert.assertTrue(true)
    }
}

只是需要注意以下几点:

  1. 创建一个空类作为测试套件的入口。
  2. 使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修饰这个空类。
  3. 将 org.junit.runners.Suite 作为参数传入注解 RunWith,以提示 JUnit 为此类使用套件运行器执行。
  4. 将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数。
  5. 保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数

五、断言

? 对于日常开发来说,想要观察某个结果,常常喜欢使用Log日志工具。但是在测试中使用断言会更好一点,因为断言会记录在测试记录中,但是Log日志却不会,对于测试统计会比较有用。断言有很多中,各个测试框架都有自己的断言方式。这里对Junit的断言Assert进行记录。

序号方法和描述
1void assertEquals(boolean expected, boolean actual) 检查两个变量或者等式是否平衡
2void assertTrue(boolean condition) 检查条件为真
3void assertFalse(boolean condition) 检查条件为假
4void assertNotNull(Object object) 检查对象不为空
5void assertNull(Object object) 检查对象为空
6void assertSame(Object expected, Object actual) assertSame() 方法检查两个相关对象是否指向同一个对象
7void assertNotSame(Object expected, Object actual)** **assertNotSame() 方法检查两个相关对象是否不指向同一个对象
8void assertArrayEquals(expectedArray, resultArray) assertArrayEquals() 方法检查两个数组是否相等

六、Junit插件

? Mock是跟Junit配合使用的测试插件,主要是虚拟对象,目前使用较多的是Mocktio。这个的作用如下:

  • 创建虚拟对象的实例
  • 在虚拟对象中设置状态和描述
  • 结合虚拟对象调用域代码作为参数
  • 在虚拟对象中验证一致性

七、参考链接

  1. junit的教程

    https://www.w3cschool.cn/junit/

  2. Android 单元测试之Mockito

    https://blog.csdn.net/chennai1101/article/details/94633446

  3. Mocktio

    https://site.mockito.org/

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 12:02:02  更:2021-09-03 12:02:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 5:55:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码