当前位置: 首页 > news >正文

go语言使用monkey库,进行mock



go语言monkey库,进行mock
1、目的
 模块自测,对依赖的模块函数进行mock,从而达到不更改其他模块代码,完成本模块全部代码测试的目的
2、库:https://github.com/bouk/monkey

3、函数以及方法举例
目录结构
src
 test
  24_mock
   main
    main.go
   mock_test
    mock.go
   test
    test.go
运行结果:
a:1+b:2=3
a:1+b:2
a:1+b:2=3
a:1+b:2

Process finished with exit code 0
    
代码如下:
main.go
package main

import (
 "github.com/bouk/monkey"
 "test/24_mock/test"
 "test/24_mock/mock_test"
 "fmt"
 "reflect"
)

func test1() {
 monkey.Patch(test.PrintAdd, mock_test.PrintAdd)
 p := test.PrintAdd(1, 2)
 fmt.Println(p)
 monkey.UnpatchAll() //解除所有替换
 p = test.PrintAdd(1, 2)
 fmt.Println(p)
}

func test2() {
 structSum := &test.SumTest{}
 //para1:获取实例的反射类型,para2:被替换的方法名,para3:替换方法
 monkey.PatchInstanceMethod(reflect.TypeOf(structSum), "PrintSum", mock_test.PrintSum)
 p := structSum.PrintSum(1, 2)
 fmt.Println(p)
 monkey.UnpatchAll() //解除所有替换
 p = structSum.PrintSum(1, 2)
 fmt.Println(p)

}

func main() {
 test1()
 test2()
}


mock.go
package mock_test

import "fmt"
import "test/24_mock/test"

func PrintAdd(a, b uint32) string {
 return fmt.Sprintf("a:%v+b:%v=%v", a, b, a+b)
}

//对应test文件夹下的PrintSum
func PrintSum(_ *test.SumTest, a, b uint32) string {
 return fmt.Sprintf("a:%v+b:%v=%v", a, b,a+b)
}

test.go
package test

import "fmt"

func PrintAdd(a, b uint32) string {
 return fmt.Sprintf("a:%v+b:%v", a, b)
}


type SumTest struct {
}

func (*SumTest)PrintSum(a, b uint32) string {
 return fmt.Sprintf("a:%v+b:%v", a, b)
}


http://www.xdnf.cn/news/850357.html

相关文章:

  • Mysql - date、datetime、timestamp 的区别
  • 浴血凤凰DNF自动辅助开发教程
  • 经典怀旧软件----PP点点通
  • 页面运行时“无法显示XML页”的解决办法
  • drupal7中常见的一个功能模块
  • 百度UIE:Unified Structure Generation for Universal Information Extraction paper详细解读和相关资料
  • apue读书笔记【一】:处理可变参数(1) va_list 、va_arg、 va_start、 va_end
  • 使用smartupload.jar实现文件上传下载
  • Windows Blue十一大新功能汇总 改良Win8
  • mysql转换double_MySQL 字符串 转 int/double CAST与CONVERT 函数的用法
  • 编程语言和翻译工具
  • 怎样修复安装linux系统,linux系统安装图解教程及卸载修复
  • 数据库常用查询
  • unity脚本中的camera相关代码
  • OCX控件数字签名图文教程(个人总结)
  • 腾讯云轻量应用服务器如何搭建自己的CS GO游戏服务器?
  • WiMAX技术到底是什么? 究竟何谓WiMAX?
  • 运维之思科篇 -----1.VLAN 、 Trunk 、 以太通道及DHCP
  • 15个Google面试题以及答案
  • 快速上手的22 个电子电路项目
  • 如何使blackberry与outlook进行数据同步方法步骤
  • dos盘启动计算机,最新万能 DOS 启动盘制作全攻略(软盘+光盘+U盘+硬盘+NTFS+应急实用工具)...
  • 网页游戏常见外挂原理及防御
  • ExtJS快速入门学习指南
  • 开源魔兽服务端代码托管地址大全
  • IBM朱近之:服务助云计算在中国落地
  • 攻入网站后台的方法
  • [转转]数独网址
  • 8年程序员年初被迫毕业,前后面试30家公司,如今终于上岸
  • 最最喜欢的韩庚……这个资料-----顶了~/(≧▽≦)/~!!!