登录
首页 >  Golang >  Go问答

go - 如何在测试用例中模拟结构的方法调用

来源:Golang技术栈

时间:2023-03-22 08:28:17 147浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《go - 如何在测试用例中模拟结构的方法调用》,就很适合你,本篇文章讲解的知识点主要包括golang。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

这是结构及其方法的示例代码

type A struct {}

func (a *A) perfom(string){
...
...
..
} 

然后我想从invoke()位于包外的函数中调用该方法,示例代码

var s := A{}
func invoke(url string){
   out := s.perfom(url)
   ...
   ...
} 

invoke我想通过模拟performA的方法来编写函数的测试用例。

在java中,我们有mockito、jmock框架来存根方法调用。

有什么办法,我们可以在不引入interfaces源代码的情况下模拟结构的方法调用吗?

正确答案

要模拟方法调用,您需要模拟您的结构。

使用您提供的代码示例,我建议您制作一个Performer实现您的Perform调用的接口。您的真实结构和模拟结构都将实现此接口。

我还建议将您的结构作为参数传递给调用函数,而不是使用全局变量。

这是一个例子:

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

在您的测试中,将模拟注入到您的invoke调用中。在您的真实代码中,将真实结构注入到您的invoke调用中。

使用像https://godoc.org/github.com/stretchr/testify/mock这样的库,你甚至可以很容易地验证你的方法是用正确的参数调用的,调用了正确的次数,并控制模拟的行为。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>