一. 测试
1.为什么要测试?
事故后果很严重,故进行完备的测试,避免事故的发生。
2.测试的分类
回归测试 |
集成测试 |
单元测试 ↓
层级从上至下,测试成本逐渐减低,而测试覆盖率逐步上升,所以单元测试的覆盖率一定程度上决定代码的质量。
二. 单元测试
单元测试主要包括输入、测试单元、输出以及校对,测试单元的概念比较广,包括接口,函数,模块等。用最后的校对来保证代码的功能与我们的预期相符。
一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性。另一方面可以提升效率,在代码有bug的情况下,通过编写本地直接运行,可以在一个较短周期内定位和修复问题。
1.单元测试-规则
●所有测试文件以_test.go 结尾
●func TestXxx(*testing.T)
●初始化逻辑放到TestMain中
2.单元测试-覆盖率
代码越完备,覆盖率越高
3.单元测试-Tips
●一般覆盖率: 50%~60%, 较高覆盖率80%+。
●测试分支相互独立、全面覆盖。
●测试单元粒度足够小,函数单一职责。
4.单元测试-依赖
单元测试需要保证稳定性和幂等性,稳定是能在任何时间,任何环境,独立运行。幂等是指每一次测试运行都应该产生与之前一样的结果。而要实现这一目的就要用到mock机制。
monkey : https:/ / github.com/ bouk/ monkey
三. 基准测试
Go语言提供了基准测试框架,基准测试是指测试一段程序的运行性能及CPU的损耗。
在实际项目开发中,经常会遇到热点代码、代码性能瓶颈,为了定位问题经常要对代码做性能分析,这就用到了基准测试。使用方法类似于单元测试。
四. 项目实践
1. 需求用例
用例图
2. ER图-Entity Relationship Diagram
3. 分层结构
- 数据层Repository : 数据Model,外部数据的增删改查
- 逻辑层Service : 业务Entity,处理核心业务逻辑输出
- 视图层Controller : 视图view,处理和外部的交互逻辑
五. 个人感悟
- 测试很重要,一定要经过完备的测试,从而避免事故的发生。
- 在项目开发中,需要考虑的问题有很多,要全面广泛地看待问题。
- 可以将一个项目分解,大化小,一点一点解决。