java中单元测试ut怎么写_UT单元测试总结基础篇
最近需要在团队中引⼊单元测试实践,特地买了《单元测试的艺术》这本书来学习,在单元测试领域这本书写得相当好,⾮常系统和完善,对单元测试希望有⼀个更深⼊的认识的同学可以来读⼀读。
这篇⽂章对UT基础概念做了⼀个简单的总结,下⼀篇提⾼篇中再总结⼀下在Java项⽬中如何使⽤PowerMock和Mockito进⾏测试桩和模拟对象的创建,以规避测试时代码对外部模块的依赖问题。
java怎么编写什么是单元测试
⼀个单元测试是⼀段代码,这段代码调⽤⼀个⼯作单元,并检验该⼯作单元的最终结果是否与期望的⼀致。
⼯作单元可以是⼀个⽅法,类或者功能单元。
为了增强测试代码的可维护性,我们通常针对⽤户更可见的功能单元编写测试⽤例。
单元测试具有什么特性
可以被⾃动化运⾏
很容易实现
运⾏速度很快
测试结果是稳定的
能完全控制被测试的单元,不包含外部依赖
各测试⽤例相互独⽴,⽆依赖关系
单元测试的价值
帮助发现代码缺陷
将缺陷发现的时间提前,开发⼈员可在本地频繁运⾏测试代码
修改或者重构代码时确保没有影响现有功能
使得开发⼈员提交代码更有信⼼
虽然在⼀定程度上单元测试增加了需求开发所需的时间,但是单元测试⼤⼤提升了代码的质量和可维护性,使得产品的整体交付周期缩短了。
什么时候写单元测试
为了最⼤化单元测试的价值,需要引⼊TDD(测试驱动开发),在产品代码编写之前写单元测试。
TDD流程: ⾸先编写⼀个会失败的测试,然后编写产品代码,接着调试⽤例确保通过,接下来重构代码或者创建另⼀个测试。
怎么写单元测试
使⽤单元测试框架编写测试代码,Java项⽬中推荐使⽤Junit或者TestNG框架。
⼀个简单的单元测试代码结构如下:
public class AppTest {
@Before
public void setUp() {
// 执⾏运⾏前准备⼯作
}
@After
public void tearDown() {
// 执⾏运⾏后销毁⼯作
}
@Test
public void unitOfWorkName_Scenario_ExpectedBehavior() {
// 准备阶段
// 执⾏阶段
// 验证阶段
}
}
每⼀个测试⽤例需要包括准备阶段,执⾏阶段和最后的验证阶段。
伪造对象
在编写测试代码的过程中会发现,被测代码通常会与⼀些不能控制的外部依赖项或者尚未实现的模块进⾏交互,我们通常会使⽤伪造对象来规避依赖项问题。
伪造对象通常包括Stub和Mock,区别如下:
Stub: 测试桩或者存根,在测试时提前定义好接⼝的请求和响应,作为伪造的对象使得被测代码能够屏蔽掉依赖顺利地执⾏。
Mock: 模拟对象,也是伪造对象,在测试⽤例中进⾏断⾔时使⽤,以验证代码与其他依赖项之间的交互⾏为。
Java项⽬中推荐使⽤PowerMock或者JMockit框架进⾏测试桩和模拟对象的创建。
如何组织和运⾏单元测试
为⽅便管理,测试代码和产品代码放在同⼀个项⽬中的不同⽂件夹下,使⽤Maven⼯具管理的Java项
⽬产品代码位于src/main⽬录下,单元测试代码位于src/test⽬录下。为了增强测试代码的可读性,每⼀个测试⽤例应该与被测⼯作单元位于同⼀个package下,每个测试⽤例的命名规范为: unitOfWorkName_Scenario_ExpectedBehavior,需要描述清楚被测⼯作单元,测试场景和期待的⾏为。
任何开发或者测试⼈员可在本地⾮常快速地运⾏单元测试代码。
开发⼈员在提交代码之前需要在本地运⾏单元测试,当所有测试⽤例通过后才能提交代码。
单元测试需要集成到CI平台上,每次构建代码都需要⾃动运⾏单元测试,如果有⽤例不能通过,需要尽快修复。
参考资料:《单元测试的艺术》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论