《有效的单元测试》是一本非常值得推荐的读物。有需要这本书的,可到文末领取。
面试官询问单元测试并非仅仅想了解这一概念,背后可能考察面试者以下三个方面:
基于以上三点,我们需要思考什么样的单元测试才能被视为有效?
整个软件工程的生命周期大致分为以下阶段:
我们再深入分析每个阶段发现缺陷的成本,主要指从发现到解决问题所需的人力时间成本:
上述内容提到了单元测试的关键要点,以下是编写优质单元测试的方法总结:
异常情况包括:
另一个优秀的策略是采用测试驱动开发(TDD)方法,即先列出所有可能的测试用例,然后再开始实现逻辑代码。这种方式可以快速创建出完备的单元测试集合。值得注意的是,在国内很少有公司采用TDD开发模式。
领域驱动设计(DDD)强调明确的边界划分,事件风暴和防腐层的设计为测试驱动开发(TDD)和单元测试提供了良好的基础。领域驱动设计(DDD)中倡导清晰的边界划分,通过事件风暴和防腐层设计,为TDD和单元测试提供了有力支持。
前文提到使用Mock对象来隔离I/O操作和随机事件,当然,Mock也可以应用于各种依赖关系,比如Spring Bean之间的依赖、工具类、各种内部接口的依赖等。Mock的作用是模拟所依赖的资源,我们可以假定依赖操作是成功或失败的,这样测试只需关注自身代码对依赖产生的响应结果即可。
Java工程也可以集成Spock框架进行单元测试,Spock使用Groovy语言编写测试用例。由于Groovy是一种动态语言,非常灵活,非常适合编写简洁的单元测试代码。同时,Spock不仅局限于模拟(Mock),还提供各种高效的功能(这些是传统JUnit和Mockito无法实现的):
where
关键词和数据表格的方式,在一个测试案例中验证要测试的参数和期望返回值的所有可能情况。**所以编写优秀的单元测试代码是卓越程序员的基本修养。因为针对有用户访问和无用户访问的项目,相同的代码甚至在极端用户流量下可能带来截然不同的效果。在面对极端用户流量时,每次修改一行代码上线都如履薄冰。怀着敬畏之心对待每一次上线和线上操作,至关重要。**
有效的单元测试:
链接:https://pan.baidu.com/s/174DXtbtAyXiO1VMzDnRtPg?pwd=msyj
提取码:msyj
如果失效:请微信搜索【码上遇见你】留言获取
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。