亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

golang包中的mock方法

golang包中的mock方法

Go
瀟瀟雨雨 2021-12-20 15:41:25
我一直無法從 golang 包中找到模擬方法的解決方案。例如,我的項目有代碼會在 Os.Getwd() 返回錯誤時嘗試恢復。我可以考慮為此進行單元測試的最簡單方法是模擬 Os.Getwd() 方法以返回錯誤,并驗證代碼是否相應地工作。我嘗試使用 testify,但似乎不可能。任何人都有這方面的經驗?
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

我自己的解決方案是將該方法作為參數,允許在測試時注入“模擬”。另外,創建一個導出的方法作為公共門面和一個未導出的方法用于測試。


例子:


    func Foo() int {        

            return foo(os.Getpid)

    }                       


    func foo(getpid func() int) int {

            return getpid()      

    } 


查看完整回答
反對 回復 2021-12-20
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

看起來,看看os.Getwd 測試可以為您提供一些如何測試代碼的示例。尋找函數TestChdirAndGetwdTestProgWideChdir

從閱讀這些內容來看,測試似乎創建了臨時文件夾。

因此,一種務實的方法是創建臨時文件夾,就像上面提到的測試一樣,然后破壞它們,從而os.Getwd引發錯誤以供您進行測試。

請小心執行這些操作,因為它們可能會弄亂您的系統。我建議在輕量級容器或虛擬機中進行測試。


查看完整回答
反對 回復 2021-12-20
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

這是 go 編譯器的限制,谷歌開發人員不想允許任何鉤子或猴子補丁。如果單元測試對你很重要——那么你必須選擇一種源代碼中毒的方法。所有這些方法如下:

  • 您不能直接使用全局包。

  • 您必須創建方法的隔離版本并對其進行測試。

  • 方法的生產版本包括方法的獨立版本和全局包。

但最好的解決方案是完全忽略 go 語言(如果可能的話)。


查看完整回答
反對 回復 2021-12-20
  • 3 回答
  • 0 關注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號