Closed lodan-sya closed 2 months ago
如现有功能有方式解决上面两种场景,请给出示例,谢谢
补充一下,单测用例都是单独写在一个包下的,跟非导出struct不在同一个包下 如 package utils type A struct { } type aInfo struct { Name string } func (A) Test4(test aInfo) string { return "test4" + ":" + test.Name } func VerTest4(b string) { info := aInfo{Name: b} a2 := A{} a2.Test4(info) }
测试用例在另外一个包 package main import ( . "github.com/bytedance/mockey" "gotest-utils/utils" ) func main() { build := Mock(utils.A.Test4).When(func(a utils.aInfo) bool { return "hhhh" == a.Name }).Return("yyyy").Build() utils.VerTest4("hhhh") println("mock次数:", build.MockTimes()) println("方法被调用的次数:", build.Times()) println("mock方法的实际入参(因为想断言入参):", build.xxxx()) build.UnPatch() } 这时候When/To节点中的func则无法使用非导出struct,所以希望 When/To 中func可以优化成any类型,由用户自己再去转回原来类型,并且希望能记录mock的实际参数
@lodan-sya 非导出场景目前暂不支持,不过你可以用反射绕过
// fn := pkg.Func
// fn:= (*Class).Func
fn := mockey.GetMethod(obj,"FuncName")
to := reflect.MakeFunc(reflect.TypeOf(fn), xxx ).Interface()
Mock(fn).To(to).Build()
我建议使用xgo,可以实现你说的效果。 https://github.com/xhd2015/xgo
1、目前mock对象有记录 方法被mock的次数和方法被调用的次数,希望能增加记录每次调用被mock函数的实际入参(可以用队列存储,后进先出)
2、使用条件When/To时,目前限制了fun(xx xx,xx xx)形参类型需要与被mock函数的形参长度和类型一致,目前期望使用When时,只限制fun中的形参长度一致即可,类型可以使用any, 因为有些场景,如被mock函数的入参 是非导出struct,这时需要使用 When来判断入参是否符合条件而进行mock时,When的fun形参无法使用这个非导出struct类型