go语言使用monkey库,进行mock

本文介绍如何使用Go语言的Monkey库进行mock测试。通过具体的代码示例,展示如何对依赖的模块函数进行mock,实现模块自测的目标。文章包含两个示例:普通函数的mock与实例方法的mock。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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)
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值