Java单元测试浅析(JUnit+Mockito)

您所在的位置:网站首页 测试框架怎么写 Java单元测试浅析(JUnit+Mockito)

Java单元测试浅析(JUnit+Mockito)

2023-09-25 19:31| 来源: 网络整理| 查看: 265

作者:京东物流 秦彪 1. 什么是单元测试

(1)单元测试环节:

测试过程按照阶段划分分为:单元测试、集成测试、系统测试、验收测试等。相关含义如下:

1)       单元测试: 针对计算机程序模块进行输出正确性检验工作。

2)       集成测试: 在单元测试基础上,整合各个模块组成子系统,进行集成测试。

3)       系统测试: 将整个交付所涉及的协作内容都纳入其中考虑,包含计算机硬件、软件、接口、操作等等一系列作为一个整体,检验是否满足软件或需求说明。

4)       验收测试: 在交付或者发布之前对所做的工作进行测试检验。

单元测试是阶段性测试的首要环节,也是白盒测试的一种,该内容的编写与实践可以前置在研发完成,研发在编写业务代码的时候就需要生成对应代码的单元测试。单元测试的发起人是程序设计者,受益人也是编写程序的人,所以对于程序员,非常有必要形成自我约束力,完成基本的单元测试用例编写。

(2)单元测试特征:

由上可知,单元测试其实是针对软件中最小的测试单元来进行验证的。这里的单元就是指相关的功能子集,比如一个方法、一个类等。值得注意的是作为最低级别的测试活动,单元测试验证的对象仅限于当前测试内容,与程序其它部分内容相隔离,总结起来单元测试有以下特征:

1)       主要功能是证明编写的代码内容与期望输出一致。

2)       最小最低级的测试内容,由程序员自身发起,保证程序基本组件正常。

3)       单元测试尽量不要区分类与方法,主张以过程性的方法为测试单位,简单实用高效为目标。

4)       不要偏离主题,专注于测试一小块的代码,保证基础功能。

5)       剥离与外部接口、存储之间的依赖,使单元测试可控。

6)       任何时间任何顺序执行单元测试都需要是成功的。

2. 为什么要单元测试

(1)单元测试意义:

程序代码都是由基本单元不断组合成复杂的系统,底层基本单元都无法保证输入输出正确性,层级递增时,问题就会不断放大,直到整个系统崩溃无法使用。所以单元测试的意义就在于保证基本功能是正常可用且稳定的。而对于接口、数据源等原因造成的不稳定因素,是外在原因,不在单元测试考虑范围之内。

(2)使用main方法进行测试:

@PostMapping(value="/save") public Map save(@RequestBody Student stu) { studentService.save(stu);     Map params = new HashMap();     params.put("code",200);     params.put("message","保存成功");     return params; }

假如要对上面的Controller进行测试,可以编写如下的代码示例,使用main方法进行测试的时候,先启动整个工程应用,然后编写main方法如下进行访问,在单步调试代码。

public static void main(String[] args) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); String json = "{"name":"张三","className":"三年级一班","age":"20","sex":"男"}"; HttpEntity httpEntity = new HttpEntity(json, headers); String url = "http://localhost:9092/student/save"; MainMethodTest test = new MainMethodTest(); ResponseEntity responseEntity = test.getRestTemplate().postForEntity(url, httpEntity, Map.class); System.out.println(responseEntity.getBody()); }

(3)使用main方法进行测试的缺点:

1)       通过编写大量的main方法针对每个内容做打印输出到控制台枯燥繁琐,不具备优雅性。

2)       测试方法不能一起运行,结果需要程序员自己判断正确性。

3)       统一且重复性工作应该交给工具去完成。

3. 单元测试框架-JUnit 3.1 JUnit简介

JUnit官网:junit.org/。JUnit是一个用于编写可重复测试的简单框架。它是用于单元测试框架的xUnit体系结构的一个实例。

JUnit的特点:

(1) 针对于Java语言特定设计的单元测试框架,使用非常广泛。

(2) 特定领域的标准测试框架。

(3) 能够在多种IDE开发平台使用,包含Idea、Eclipse中进行集成。

(4) 能够方便由Maven引入使用。

(5) 可以方便的编写单元测试代码,查看测试结果等。

JUnit的重要概念:

名称功能作用Assert断言方法集合TestCase表示一个测试案例TestSuite包含一组TestCase,构成一组测试TestResult收集测试结果

JUnit的一些注意事项及规范:

(1) 测试方法必须使用@Test 修饰

(2) 测试方法必须使用public void 进行修饰,不能带参数

(3) 测试代码的包应该和被测试代码包结构保持一致

(4) 测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖

(5) 测试类一般使用 Test作为类名的后缀

(6) 测试方法使一般用test 作为方法名的前缀

JUnit失败结果说明:

(1) Failure:测试结果和预期结果不一致导致,表示测试不通过

(2) error:由异常代码引起,它可以产生于测试代码本身的错误,也可以是被测代码的Bug

3.2 JUnit内容

(1) 断言的API

断言方法断言描述assertNull(String message, Object object)检查对象是否为空,不为空报错assertNotNull(String message, Object object)检查对象是否不为空,为空报错assertEquals(String message, Object expected, Object actual)检查对象值是否相等,不相等报错assertTrue(String message, boolean condition)检查条件是否为真,不为真报错assertFalse(String message, boolean condition)检查条件是否为假,为真报错assertSame(String message, Object expected, Object actual)检查对象引用是否相等,不相等报错assertNotSame(String message, Object unexpected, Object actual)检查对象引用是否不等,相等报错assertArrayEquals(String message, Object[] expecteds, Object[] actuals)检查数组值是否相等,遍历比较,不相等报错assertArrayEquals(String message, Object[] expecteds, Object[] actuals)检查数组值是否相等,遍历比较,不相等报错assertThat(String reason, T actual, Matcher


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3