第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang:在調用 Init 方法之前模擬接口方法

Golang:在調用 Init 方法之前模擬接口方法

Go
慕標琳琳 2022-11-23 19:27:00
我如何模擬在包init()方法中調用的東西?例如:主程序var myService MyService = myservicepkg.New()func init(){   response := myService.get()}func otherMethod(){   //do something}主測試.gofunc Test_otherMethod(){  ctrl := NewController(t)  defer ctrl.Finish()  myServiceMock = myservicepkg.NewMock(myService)  myServiceMock.EXPECT().get().return("success")}問題是init()在服務被模擬替換之前被調用。
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經(jīng)驗 獲得超13個贊

這是使用可變全局狀態(tài)的問題。

我的建議是添加一個標志以在某些條件下不運行它,或者公開一個可以在內部測試中恢復/更新這個全局變量的私有函數(shù)。

這反映了您的設計:如果測試起來很復雜,也許您應該重構。

創(chuàng)建一個帶有字段服務的對象應用程序,在構造函數(shù)/構建器/工廠上創(chuàng)建將更容易測試。

init的用法很講究。除了將驅動程序注冊到 sql 包中,我從不使用它(可能是為了處理標志)。

也許你可以在你的設計中添加更多的 OO


查看完整回答
反對 回復 2022-11-23
?
開心每一天1111

TA貢獻1836條經(jīng)驗 獲得超13個贊

您將需要調用otherMethod()內部init()。否則之前不能調用它init()。



查看完整回答
反對 回復 2022-11-23
?
RISEBY

TA貢獻1856條經(jīng)驗 獲得超5個贊

我找到了一個解決方法,您可以阻止初始化代碼在您的測試中執(zhí)行,并像這樣隔離地測試該方法:


func init(){

  if len(os.Args) > 0 && strings.HasSuffix(os.Args[0], ".test") {

    log.Printf("skipping jwt.init() for testing")

  } else if len(os.Args) > 1 && strings.HasSuffix(os.Args[1], "-test.run") {

    log.Printf("skipping jwt.init() for testing")

  } else { 

    response := myService.get()

  }

}

這將阻止調用 init 服務調用。


查看完整回答
反對 回復 2022-11-23
  • 3 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號