[ Go 语言工程实践之测试 | 青训营笔记 ]

107 阅读2分钟

一. 测试

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. 需求用例

用例图

image.png

2. ER图-Entity Relationship Diagram

image.png

3. 分层结构

  • 数据层Repository : 数据Model,外部数据的增删改查
  • 逻辑层Service : 业务Entity,处理核心业务逻辑输出
  • 视图层Controller : 视图view,处理和外部的交互逻辑

五. 个人感悟

  1. 测试很重要,一定要经过完备的测试,从而避免事故的发生。
  2. 在项目开发中,需要考虑的问题有很多,要全面广泛地看待问题。
  3. 可以将一个项目分解,大化小,一点一点解决。