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

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

如何斷言與擔架/作證/模擬斷言呼叫的部分匹配?

如何斷言與擔架/作證/模擬斷言呼叫的部分匹配?

Go
慕斯709654 2022-09-12 20:23:31
請考慮 Go 中的此單元測試文件。我正在使用 github.com/stretchr/testify/mock 包。type Person struct {Name string; Age int}type Doer struct { mock.Mock }func (d *Doer) doWithThing(arg Person) {    fmt.Printf("doWithThing %v\n", arg)    d.Called(arg)}func TestDoer(t *testing.T) {    d := new(Doer)    d.On("doWithThing", mock.Anything).Return()    d.doWithThing(Person{Name: "John", Age: 7})        // I don't care what Age was passed. Only Name    d.AssertCalled(t, "doWithThing", Person{Name: "John"})}此測試失敗,因為當我沒有通過年齡時在比較中使用。我明白了,但我想知道,我如何斷言通過的部分論點?我希望這個測試通過任何測試,只要testifyAge: 0AgeName = John
查看完整描述

1 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

使用模擬。匹配。

簡而言之,它用(未導出)包裝任意匹配器函數:mock.argumentMatcher

參數Matcher 執行自定義參數匹配,返回參數是否與期望夾具函數匹配。

特別是,的論點是:mock.MatchedBy

[...]接受返回 bool 的單個參數(預期類型)的函數

因此,您可以按如下方式使用它:

personNameMatcher := mock.MatchedBy(func(p Person) bool {

    return p.Name == "John"

})

d.AssertCalled(t, "doWithThing", personNameMatcher)


查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 81 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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