android单元测试教程,Android单元测试-Junit

article/2025/10/9 8:24:35

基本用法实际操作

public class Caculation {

public double sum(double numA, double numB) {

return numA + numB;

}

public double multiply(double numA, double numB) {

return numA * numB;

}

}

2、类名右键--Go To--Test,生成测试类

项目中androidTest文件夹里的就是UI测试代码,而test文件夹是Junit部分的单元测试代码。

eab962c835d0

3、编辑测试类,右键类名或者方法可运行得出测试结果

public class CaculationTest {

private Caculation mCaculation;

@Before

public void setUp() throws Exception {

mCaculation = new Caculation();

}

@Test

public void sum() throws Exception {

assertEquals(2,mCaculation.sum(1,1),0);

}

@Test

public void multiply() throws Exception {

assertEquals(10,mCaculation.multiply(2,5),0);

}

}

Junit断言及注解说明

断言

assertArrayEquals(expecteds, actuals) 查看两个数组是否相等。

assertEquals(expected, actual) 查看两个对象是否相等。类似于字符串比较使用的equals()方法

assertNotEquals(first, second) 查看两个对象是否不相等。

assertNull(object) 查看对象是否为空。

assertNotNull(object) 查看对象是否不为空。

assertSame(expected, actual) 查看两个对象的引用是否相等。类似于使用“==”比较两个对象

assertNotSame(unexpected, actual) 查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象

assertTrue(condition) 查看运行结果是否为true。

assertFalse(condition) 查看运行结果是否为false。

assertThat(actual, matcher) 查看实际值是否满足指定的条件

fail() 让测试失败

注意:上面的方法,都有一个重载的方法,可以在前面加一个String类型的参数,表示如果验证失败的话,将用这个字符串作为失败的结果报告。

比如:

assertEquals("Current user Id should be 1", 1, currentUser.id());

注解

@Before 初始化方法

@After 释放资源

@Test 测试方法,在这里可以测试期望异常和超时时间

@Ignore 忽略的测试方法

@BeforeClass 针对所有测试,只执行一次,且必须为static void

@AfterClass 针对所有测试,只执行一次,且必须为static void

@RunWith 指定测试类使用某个运行器

@Parameters 指定测试类的测试数据集合

@Rule 允许灵活添加或重新定义测试类中的每个测试方法的行为

@FixMethodOrder 指定测试方法的执行顺序

一个测试类单元测试的执行顺序为:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

每一个测试方法的调用顺序为:

@Before –> @Test –> @After

打包测试

同样,如果一个项目中有很多个测试用例,如果一个个测试也很麻烦,因此打包测试就是一次性测试完成包中含有的所有测试用例。

@RunWith(Suite.class)

@Suite.SuiteClasses({ AssertTests.class, CaculationTest.class, DemoTest.class })

public class AllCaseTest {

}

需要向@RunWith注解传递一个参数Suite.class 。同时,我们还需要另外一个注解@Suite.SuiteClasses,来表明这个类是一个打包测试类。并将需要打包的类作为参数传递给该注解就可以了。至于AllCaseTest随便起一个类名,内容为空既可。运行AllCaseTest类即可完成打包测试

限时测试

在@Test后加入timeout参数

@Test(timeout=1000)

public void multiply() throws Exception {

assertEquals(10,mCaculation.multiply(2,5),0);

}

直接用@Rule设置该类的timeout参数

@Rule

public Timeout globalTimeout = new Timeout(10000); // 10 seconds max per method tested

验证方法会抛出某些异常

public class Calculator {

// Omit testAdd() and testMultiply() for brevity

public double divide(double divident, double dividor) {

if (dividor == 0) throw new IllegalArgumentException("Dividor cannot be 0");

return divident / dividor;

}}

public class CalculatorTest {

Calculator mCalculator;

@Before

public void setup() {

mCalculator = new Calculator();

}

// Omit testAdd() and testMultiply() for brevity

@Test(expected = IllegalArgumentException.class)

public void test() {

mCalculator.divide(4, 0);

}

}

@Test(expected = IllegalArgumentException.class)表示验证这个测试方法将抛出IllegalArgumentException异常,如果没有抛出的话,则测试失败。

参考文章


http://chatgpt.dhexx.cn/article/TFwHqLi2.shtml

相关文章

Android单元测试读写文件,如何在Android单元测试中读取仅测试文件

对于我的Android应用程序,我正在编写需要读取一些文件的单元测试。 由于这些是仅测试文件,因此我不希望它们出现在res文件夹中,因为我不希望它们最终出现在最终的.apk文件中。 我想做与此问题类似的事情,但要使用新添加的(在Gradl…

安卓项目如何做单元测试

前言 先说一下创建篇文章的目的,近期负责搭建公司的单元测试框架,于是查阅了网上的很多文章,以及参考了github上很多的项目例子,并且也进行了相当多的尝试。这其中花费了很多的精力,大约有两三周的时间,远…

android单元测试作用,关于 Android 单元测试

本文不会用各种高大上的理由试图去说服你写单元测试,只是描述笔者在单元测试这条路上一路走来的思考和简单的示例,如果顺便能让你觉得单元测试其实也没那么遥远、回头也在实际项目中尝试一下,估计就是本文最大的收获了。 一、提起单元测试&am…

分享基于安卓项目的单元测试总结

前言: 负责公司的单元测试体系的搭建,大约有一两个月的时间了,从最初的框架的调研,到中期全员的培训,以及后期对几十个项目单元测试的引入和推进,也算是对安卓的单元测试有了一些初步的收获以及一些新的认…

java 线程 js_js javascript 实现多线程

在讲之前,大家都知道js是基于单线程的,而这个线程就是浏览器的js引擎。 首先来看一下大家用的浏览器都具有那些线程吧。 假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让用户进行等待&#xff0…

js创建多线程

我们知道js是单线程的,如果把占用大量计算资源的代码,或者获取大量数据,耗时较多的请求分离出去,用一个单独的线程去处理,会不会提升页面的性能的,答案是肯定的,尤其是现在我们开发大多是单页应…

javascript-js实现多线程

在讲之前,大家都知道js是基于单线程的,而这个线程就是浏览器的js引擎。 首先来看一下大家用的浏览器都具有那些线程吧。 假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让用户进行等待&#xff…

html5多线程例子,javascript的单线程事件循环及多线程介绍

前言 其实我前面文章对于改变js的执行顺序及多线程都有相关介绍!例如,我们可以用setTimeout(fn,0)改变代码执行循序,文章最后也提及了Event Loop(事件循环)。同时,js的Worker可以模拟实现多线程,我前面文章也有类似的应…

js 实现多线程

2019独角兽企业重金招聘Python工程师标准>>> 一、多线程理解 首先,我们要理解什么是多线程,百度百科上说:多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线…

javascript多线程

一、什么是多线程 二、Concurrent.Thread.js <meta charset"utf-8" /> <script src"Concurrent.Thread.js"></script> <script src"https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script><style&…

js 多线程Worker

任务执行优先级&#xff0c;微任务&#xff08;Promise&#xff09;>宏任务&#xff08;定时器&#xff09;>线程任务&#xff08;Worker&#xff09; 多线程处理多个任务&#xff0c;这里假设5个任务循环了80亿&#xff0c;如果按之前js单线程执行是不是5*80亿&#xf…

Javascript的单线程与多线程

目录 一、浏览器的线程和进程 1.浏览器的线程 2.浏览器是多进程的 二、Javascript是单线程的 1.异步Ajax也是单线程的 2.setInterval和setTimeout本质上并不是多线程 三、Web Worker支持多线程 1.多线程间数据交互 2.Web Worker的兼容性 3.Web Worker的使用限制 3.1同…

JavaScript多线程编程

浏览器端JavaScript是以单线程的方式执行的&#xff0c;也就是说JavaScript和UI渲染占用同一个主线程&#xff0c;那就意味着&#xff0c;如果JavaScript进行高负载的数据处理&#xff0c;UI渲染就很有可能被阻断&#xff0c;浏览器就会出现卡顿&#xff0c;降低了用户体验。 …

JavaScript多线程初步学习

一、多线程理解 首先&#xff0c;我们要理解什么是多线程&#xff0c;百度百科上说&#xff1a;多线程&#xff08;英语&#xff1a;multithreading&#xff09;&#xff0c;是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时…

JavaScript如何实现多线程?

今天看到一道面试题&#xff0c;问js如何实现多线程?下面来总结一下&#xff1a; 因为 JS是一种单线程语言&#xff0c;即使是一些异步的事件也是在JS的主线程上运行的。像setTimeout、ajax的异步请求&#xff0c;或者是dom元素的一些事件&#xff0c;都是在JS主线程执行的&a…

JS多线程

JS是多线程的吗&#xff1f; 多线程编程相信大家都很熟悉&#xff0c;比如在界面开发中&#xff0c;如果一个事件的响应需要较长时间&#xff0c;那么一般做法就是把事件处理程序写在另外一个线程中&#xff0c;在处理过程中&#xff0c;在界面上面显示类似进度条的元素。这样…

at24c16如何划分出多个读写区_mega32数组、内存以及AT24C16读写相关

主控&#xff1a;mega32 编译器&#xff1a;iar2.31E 这两天折腾一个模块程序&#xff0c;一个温度补偿参数&#xff0c;本来是72个字节&#xff0c;现在扩展了三倍&#xff0c;变成288个&#xff0c;然后各种问题出现了。 第一次修改时想当然&#xff0c;直接把两个用到的全局…

STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储

目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明STC8H开发(四): FwLib_STC8 封装库的介绍和使用注意事项STC8H开发(五…

STM32的硬件I2C与AT24C16

刚学STM32的时候就听闻STM32的硬件I2C存在重大bug&#xff0c;会导致运行卡死在等待ACK的过程中&#xff0c;所以一直以来对其避而远之&#xff0c;转而以模拟I2C取代之。最近这段时间一直在用STM32 CubeMX&#xff0c;图形化设置界面屡试不爽&#xff0c;连USB这种复杂外设都能…

STM32F030 硬件I2C驱动 AT24C16

网络上很多F1系列的ATC24的读写程序&#xff0c;但F0几乎没有。由于F0完全重写了I2C&#xff0c;所以以往的代码并不能直接使用&#xff0c;修改事件、接口上会浪费很多时间&#xff0c;特别是对于使用F0系列进行入门的新手。 在此十分感谢 畅学电子网 的对于AT24C16的资料&am…