在 golang 中测试第 3 方包

我是 golang 的新手,正在尝试使用https://github.com/huandu/facebook的 facebook 包编写一个简单的学习应用程序。


我能够获得包并连接到 facebook 并点击 facebook API。这很好,但测试是我关心的问题。


起初我只是调用该方法并在其中创建一个 facebook 对象。然后经过一些研究,我尝试传入我想模拟的 facebook 方法。意识到我需要多种方法,我确信传递接口是正确的方法。


所以我尝试创建包将实现的接口。


type IFbApp interface {

    ExchangeToken(string) (string, int, error)

    Session(string) IFbSession

}


type MyFbApp struct{}


func (myFbApp *MyFbApp) ExchangeToken(token string) (string, int, error) {

    return myFbApp.ExchangeToken(token)

}


func (myFbApp *MyFbApp) Session(token string) IFbSession {

    return myFbApp.Session(token)

}


type IFbSession interface {

    User() (string, error)

    Get(string, map[string]interface{}) (map[string]interface{}, error)

}


type MyFbSession struct{}

func (myFbSession *MyFbSession) User() (string, error) {

    return myFbSession.User()

}


func (myFbSession *MyFbSession) Get(path string, params map[string]string) (map[string]string, error) {

    return myFbSession.Get(path, params)

}


func SomeMethod() {

    Facebook(fb.New("appId", "appSecret")); // fb calls package

}


func Facebook(fbI IFbApp) {

    fbI.ExchangeToken("sometokenhere");

}

由于出现错误,我无法编译此代码


cannot use facebook.New("appId", "appSecret") (type *facebook.App) as type IFbApp in argument to Facebook:

    *facebook.App does not implement IFbApp (wrong type for Session method)

        have Session(string) *facebook.Session

        want Session(string) IFbSession

将 IFbSession 切换到 *facebook.Session 当然会使其编译,但随后我还需要模拟 Session 结构中的方法。


我的计划是在我的 test.go 文件中创建实现我的接口的模拟结构,并将其传递给被测方法。这是正确的方法吗?


我想尽可能地保持纯 golang 并远离模拟框架。


慕容森
浏览 173回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go