PHP+Go 开发仿简书,实战高并发高可用微服务架构
Golang-单元测试和模拟框架的介绍和推荐
简介:探索golang的单元测试框架,看看哪个框架与业务经验结合得更好。
我会在标题中标注推荐帧和不推荐帧。如果没有标注,说明体验一般,但是没有特别的缺点。我将拭目以待。
一、单元测试框架介绍
1.本地测试
1.1示例
func TestModifyArr(t *测试。T) {
arr := [3]int{0,1,2}
修改(Arr)
if 112233 == arr[0] {
T.logf ("[testmodifyar] test成功修改了数组元素!")
} else if 0 == arr[0] {
T.errorf ("[testmodifyar] test未能修改数组元素!元素未修改”)
}否则{
T.errorf ("[testmodifyar] test未能修改数组元素!未知元素:%d ",arr[0])
}
}
复制代码
注意:在使用t.Errorf时,单个测试也会被设置为失败(但是测试不会立即停止,只有FailedNow或Fatalf才会停止)
1.2扩展:表格驱动的设计思想
其实就是把多个测试用例封装成一个数组,依次执行同一个测试逻辑。
即使是其他测试框架,这种设计思路也是相当有用的,用例多的时候可以简化代码量。
示例:
风险值(
pow tests =[]结构{
基础浮动64
电源浮动64
预期浮动64
}{
{1, 5, 1},
{2, 4, 16},
{3, 3, 27},
{5, 0, 1},
}
)
//测试一些数学包的计算方法
func testmathppkgmethodbytesting(t * testing。T) {
对于索引,当前测试:=范围功率测试{
if currentTest.expected!=数学。Pow(当前测试基准,当前测试功率){
t.errorf("[TestMathPkgMethod]% d th test:%.2f % . 2f的幂不是预期的:% . 2f ",
index,currentTest.base,currentTest.power,currentTest.expected)
}
}
t.Logf("[TestMathPkgMethod]所有测试都通过了!")
}
复制代码
1.3平行测试
使用方法:在测试代码中执行:t.Parallel(),测试方法可以和其他测试用例并行执行。
场景:一般需要同时执行多个用例,比如测试生产和消费。
但个人不建议这么做,因为这有点违背“单一测试”的概念:单一测试测试一个功能。类似的场景也可以通过在单次测量中设置通道多流程来实现。
2、goconvey
2.1示例
介绍方法:
去找github.com/smartystreets/goconvey/convey
导入模式:
导入(
。" github . com/smarty streets/go convey/convey "
)
//提醒:goconvey、gomonkey等工具类最好使用这种导入方法,减少使用其内部方法的代码长度,使代码更加简洁。
复制代码
func TestMathPkgMethodByConvey(t *测试。T) {
Convey(" Convey test power ",t,func() {
对于_,当前测试:=范围功率测试{
所以(数学。Pow(currentTest.base,currentTest.power),ShouldEqual,currentTest.expected)
}
})
}
复制代码
So的这种方法结构对于刚接触GoConvey的同学来说可能有点难以理解。下面是源代码的简要说明:
//源代码:github . com \ smarty streets \ go convey @ v 1 . 6 . 4 \ convey \ context . go
类型断言函数(实际接口{},应为...接口{})字符串
......
func (ctx *context) So(实际接口{},assert断言,应为...接口{}) {
if result := assert(实际,预期...);result == assertionSuccess {
ctx.assertionReport(报告。NewSuccessReport())
}否则{
ctx.assertionReport(报告。NewFailureReport(结果))
}
}
复制代码
关键是对So参数的理解。总共有三个参数:
实际:输入
断言:断言
预期:预期值
3.3全局变量的打桩
用法类似于gostub的Stub方法,不赘述。
此外,还有ApplyMethod(为对象的指定方法打桩)、ApplyMethodSeq等。,而且用法还是很像ApplyFunc的。您可以详细阅读参考博客,或者只查看源代码中的测试示例。
四。总结与展望
介绍了几种常见的单测和mock框架的使用方法,得出了evidence+gomonkey是一种比较直观易用的框架的结论。
PHP+Go 开发仿简书,实战高并发高可用微服务架构
download:链接:https://pan.baidu.com/s/1h3P5lsTvPMPuMl61p-SBAA?pwd=kazf
提取码:kazf
--来自百度网盘超级会员V5的分享