gomonkey

gomknkey是golang的测试框架,在函数打桩方面,我觉得比较好用。

gomonkey调研文档和学习gomonkey概述examples1 为函数打桩2 函数打序列桩3、函数变量打桩5、全局变量打桩6、成员方法打桩7、成员方法打序列桩8、接口打桩总结

gomonkey调研文档和学习

gomonkey概述

学习地址 gomonkey 是 golang 的一款打桩框架,目标是让用户在单元测试中低成本的完成打桩,从而将精力聚焦于业务功能的开发。 特性列表:

  • 支持为一个函数打一个桩

  • 支持为一个成员方法打一个桩

  • 支持为一个接口打一个桩

  • 支持为一个全局变量打一个桩

  • 支持为一个函数变量打一个桩

  • 支持为一个函数打一个特定的桩序列

  • 支持为一个成员方法打一个特定的桩序列

  • 支持为一个函数变量打一个特定的桩序列

  • 支持为一个接口打一个特定的桩序列

examples

例子中所有的代码都在这:https://github.com/fishingfly/gomonkey_examples

1 为函数打桩

ApplyFunc 第一个参数是函数名,第二个参数是桩函数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。

这边是对fake.exec函数打桩,模拟exec函数的输出。,fake.exec函数在fake目录下,可以来下我的代码库看下。 上面这种模拟函数输出有啥应用,从我实际使用的角度出发,我们看下面例子: mytest.go

测试类mytest_test.go

我模拟了AddOne和MinusOne函数的输出,以达到MultiAddOne函数的效果。

2 函数打序列桩

ApplyFuncSeq第一个参数是函数名,第二个参数是特定的桩序列参数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。

3、函数变量打桩

ApplyFuncVar 第一个参数是函数变量的地址,第二个参数是桩函数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。

4、函数变量打序列桩 ApplyFuncVarSeq 第一个参数是函数变量地址,第二个参数是特定的桩序列参数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。

5、全局变量打桩

ApplyGlobalVar 第一个参数是全局变量的地址,第二个参数是全局变量的桩。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。

6、成员方法打桩

ApplyMethod 第一个参数是目标类的指针变量的反射类型,第二个参数是字符串形式的方法名,第三个参数是桩函数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。

7、成员方法打序列桩

ApplyMethodSeq 第一个参数是目标类的指针变量的反射类型,第二个参数是字符串形式的方法名,第三参数是特定的桩序列参数。测试完成后,patches 对象通过 Reset 成员方法删除所有测试桩。

8、接口打桩

总结

在我看来,gomonkey是弥补了goconvey的不足,两者一起使用可以满足基本需要。goconvey负责断言,gomonkey负责为变量和函数打桩,构造各种测试条件。

最后更新于

这有帮助吗?