# 单元测试

> 此开源图书由[ithaiq](https://github.com/ithaiq)原创，创作不易转载请注明出处

* 测试类型如下，单元测试和API测试属于白盒测试；集成测试、系统测试、UI测试属于黑盒测试

![](https://443932726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPqf8H3iq4BH7ZwqDpy%2Fuploads%2FI4L94huUJmlMQiYxPAVo%2Fimage.png?alt=media\&token=c2195b73-e93b-4598-a17d-0752baca60ad)

*   三种单测概念

    * fake：指为需要测试单元简单模拟了实际运行环境的，确保正常输入和输出即可。
    * stub：为fake添加预定的数据后，便成为了stub（打桩）。
    * mock：stub仅仅是包含了预定数据的fake，并不表明状态不能用于断言，但是mock储存了可用于断言的状态。

    ![](https://443932726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPqf8H3iq4BH7ZwqDpy%2Fuploads%2FR1bGcQKI7cysWAqUs7g8%2Fimage.png?alt=media\&token=43eee5eb-43f3-4bf3-bd18-825df6e85ecd)
*   Go相关单测方式

    * Benchmark：性能测试
    * Table Driven Test：表驱动测试
    * Go Fuzzing：模糊测试（go1.18新加）

    ![](https://443932726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPqf8H3iq4BH7ZwqDpy%2Fuploads%2FqNHc2qX5NZRgsdz53cHu%2Fimage.png?alt=media\&token=1fbdd9e4-389e-4af9-acc3-271ff2b578bd)
* Go单测相关库或框架
  * testify：断言asset很好用
  * gomock：生成mock打桩代码
  * sqlmock：校验sql和返回sql数据
  * gomonkey：动态补丁无需生成代码，可用于针对非接口函数测试
  * BDD: 测试驱动框架
    * 表驱动测试存在测试用例过多复杂难以维护，不能明确知道每个用例的目的和差别的问题
    * BDD目标是追求每个测试用例都可以描述、并且用例之间达到复用
    * goconvery ginkgo

![](https://443932726-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MPqf8H3iq4BH7ZwqDpy%2Fuploads%2Fn5zRTrmDIqKcqEJY1O13%2Fimage.png?alt=media\&token=4a091d9d-7592-4f45-b257-beb1d9fc0329)

