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


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐