Android单元测试(一):JUnit框架的使用
程序员文章站
2024-03-15 18:50:12
...
前言
以前工作中,没有写过测试用例,每次功能做完之后,都是运行在手机上或是模拟器上,进行测试。最近看了一些公司的招聘信息,部分公司要求会单元测试,于是了解了一下android单元测试的资料,我去,单元测试用起来真是好处多多,得抓紧时间学习一下了。
工程介绍
新建android项目,模板代码会默认在build文件中添加JUnit的依赖,而单元测试代码是放在src/test/java下面的,如下图
JUnit介绍
什么是JUnit
Unit是Java编程语言的单元测试框架,用于编写和可重复运行的自动化测试。
JUnit引入
使用时在app的build文件中添加依赖(新建工程时,会默认在build文件中添加JUnit的依赖)
testCompile 'junit:junit:4.12'
JUnit注解
注解 | 描述 |
---|---|
@Test | 测试注解,标记一个方法可以作为一个测试用例 。 |
@Before | Before注解表示,该方法必须在类中的每个测试之前执行,以便执行某些必要的先决条件。 |
@BeforeClass | BeforeClass注解指出这是附着在静态方法必须执行一次并在类的所有测试之前,这种情况一般用于测试计算、共享配制方法(如数据库连接)。 |
@After | After注释表示,该方法在每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等)。 |
@AfterClass | 当需要执行所有测试在JUnit测试用例类后执行,AlterClass注解可以使用以清理一些资源(如数据库连接),注意:方法必须为静态方法。 |
@Ignore | 当想暂时禁用特定的测试执行可以使用这个注解,每个被注解为@Ignore的方法将不再执行 |
@Runwith | @Runwith就是放在测试类名之前,用来确定这个类怎么运行的。也可以不标注,会使用默认运行器。 |
@Parameters | 用于使用参数化功能。 |
@SuiteClasses | 用于套件测试 |
执行顺序:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
JUnit断言
断言 | 描述 |
---|---|
void assertEquals([String message],expected value,actual value) | 断言两个值相等。值类型可能是int,short,long,byte,char,Object,第一个参数是一个可选字符串消息 |
void assertTrue([String message],boolean condition) | 断言一个条件为真 |
void assertFalse([String message],boolean condition) | 断言一个条件为假 |
void assertNull([String message],java.lang.Object object) | 断言一个对象为空(null) |
void assertNotNull([String message],java.lang.Object object) | 断言一个对象不为空(null) |
void assertSame([String message],java.lang.Object expected,java.lang.Object actual) | 断言两个对象引用相同的对象 |
void assertNotSame([String message],java.lang.Object unexpected,java.lang.Object actual) | 断言两个对象不是引用同一个对象 |
void assertArrayEquals([String message],expectedArray,resultArray) | 断言预期数组和结果数组相等,数组类型可能是int,short,long,byte,char,Object |
JUnit使用
我们通过对下面简单类的测试,来说明JUnit是怎么使用的。
package com.app.wayee.androidunittest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class DateUtil {
//日期转换
public static DateUtil INSTANCE = new DateUtil();
private SimpleDateFormat sdr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
/**
* 將時間格式如(2020-03-25 13:26:22)转化成时间戳
* @param time
* @return
* @throws ParseException
*/
public long dateToStamp(String time) throws ParseException {
return sdr.parse(time).getTime();
}
/**
* 将时间戳转化成时间
* @param stamp
* @return
*/
public String stampToDate(long stamp){
Date date = new Date(stamp);
return sdr.format(date);
}
}
基础用法
- 首先测试方法stampToDate
public class ExampleUnitTest1 extends TestCase {
// private String time = "2020-03-25 15:00:00"; //1585119600000
private String time = "2020-03-25";
private long timeStamp = 4242511254555L;//2104-06-10 11:20:54
/**
* 测试将时间戳转成时间
*/
@Test
public void stampToDateTest(){
String timeResult = DateUtil.INSTANCE.stampToDate(timeStamp);
assertEquals(timeResult,"2104-06-10 11:20:54");
}
@Test
public void dateToStampTest() throws ParseException {
long data = DateUtil.INSTANCE.dateToStamp("2020-03-25");
assertEquals(data,"1585119600000");
}
}
测试步骤如下及测试结果展示如下图:
- 接下来测试 dateToStamp
我们知道在dateToStamp方法中,有抛出一个解析异常(ParseException)。也就是当参数没有按照规定格式去传,就会导致这个异常。
那我们怎么验证一个方法是否抛出了异常呢?可以给@Test注解设置expected参数来实现,如下:
这样,如果抛出了异常,则测试用例通过。
参数化测试
按照以上方法进行测试,没进行一次测试都要修改参数及相应的值,使用以下方法可以避免这种麻烦
推荐阅读
-
Android单元测试(一):JUnit框架的使用
-
Android 单元测试(一) 之JUnit基础
-
TestNG:一个超越JUnit和NUnit的新测试框架 博客分类: 技术总结其他开源框架 TestNGJUnitNUnit测试框架
-
使用android studio 来开发hello world app的时候,遇到的一些坑。 博客分类: Java android
-
Java中的异常测试框架JUnit使用上手指南
-
整理Java的MyBatis框架中一些重要的功能及基本使用示例
-
Java中的异常测试框架JUnit使用上手指南
-
使用Java的Spring框架编写第一个程序Hellow world
-
ssi架构下使用struts2的标签的一个小问题 博客分类: web框架
-
使用Java的Spring框架编写第一个程序Hellow world