Go 测试用例中结构体的模拟方法调用
问题:
如何模拟Go 测试用例中结构体的方法调用,无需在源代码中引入接口代码?
代码示例:
type A struct {} func (a *A) perfom(string){ ... ... .. } var s := A{} func invoke(url string){ out := s.perfom(url) ... ... }
答案:
要模拟结构体的方法调用,一方法是使用模拟对象。
使用 Mock 的解决方案对象:
示例代码:
type Performer interface { perform() } type A struct {} func (a *A) perform() { fmt.Println("real method") } type AMock struct {} func (a *AMock) perform () { fmt.Println("mocked method") } func caller(p Performer) { p.perform() }
在测试用例中,将模拟实现注入到调用函数中:
func TestCallerMock(t *testing.T) { mock := &AMock{} caller(mock) }
在真正的代码中,将真正的实现注入到invoke函数中:
func RealInvoke(url string) { a := &A{} out := a.perform(url) }
以上是如何在没有接口的 Go 测试中模拟结构方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!