Go 使用var声明来模拟结果的函数调用测试
我正在测试一个函数,它调用了Go中的另一个函数。这就是我所拥有的Go 使用var声明来模拟结果的函数调用测试,go,Go,我正在测试一个函数,它调用了Go中的另一个函数。这就是我所拥有的 package b type b struct {...} func (b *b) functionB(){...} 我想修改b中的函数声明,如下所示: package b type b struct {...} var functionB = b.FuncInB func (b *b) FuncInB(){...} type B struct {...} 这样我就可以模拟a中函数b的返回。但是,我在a中得到错误消
package b
type b struct {...}
func (b *b) functionB(){...}
我想修改b
中的函数声明,如下所示:
package b
type b struct {...}
var functionB = b.FuncInB
func (b *b) FuncInB(){...}
type B struct {...}
这样我就可以模拟a中
函数b
的返回。但是,我在a中得到错误消息,说b.functionB
未定义,因为它应该是b对象的函数。如何实现这一点?如果要在另一个包中使用一个包的定义,必须将其导出。这是通过让定义以大写字母开头来实现的。您的类型应定义如下:
package b
type b struct {...}
var functionB = b.FuncInB
func (b *b) FuncInB(){...}
type B struct {...}
不能通过函数的类型访问函数。这条线
var functionB = b.FuncInB
将不起作用,因为您只能从现有结构中引用函数。您应该删除这一行,并以不同的方式调用它(见下文)
您的包a现在有两个小问题。当您想从packageB
中使用structB
时,您必须像这样引用它B.B
import "b"
b.B{...}
或对b包进行点导入:
import . "b"
B{...}
最后一件事是,在分配与包同名的变量时,要对包名进行阴影处理。在这种情况下,应使用不同的变量名:
func (a *a) functionA() {
myB := b{...}
myB.FunctionB()
...
}
因此,最终,您的软件包应该如下所示:
package b
type b struct {...}
var functionB = b.FuncInB
func (b *b) FuncInB(){...}
type B struct {...}
包b
B型结构{
// ...
}
func(b*b)FuncInB(){
// ...
}
a包
输入“b”
类型a结构{
// ...
}
func(a*a)函数(){
myB:=B{
// ...
}
myB.functionB()
// ...
}
您应该重新设计并停止嘲弄。您应该测试包b,并假设它在测试包a时工作正常,只需调用b的方法即可。mock是一种糟糕的技术,尤其是在Go中。@Volker我正在为我的函数创建单元测试,需要这样做。我看到另一篇关于模拟函数的帖子,它不可能从a
调用b.functionB
,无论它是函数还是方法,因为它不是。这就是我建议重新设计的原因,因为您不应该这样做。谢谢您的回复,但我的问题是关于在b
中使用var的声明,欢迎使用。很难回答,因为你用一种非常抽象的方式陈述你的问题。如果你能提供更多你真正想要实现的细节,回答起来会更容易。