猿问

如何断言与担架/作证/模拟断言呼叫的部分匹配?

请考虑 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


慕斯709654
浏览 84回答 1
1回答

郎朗坤

使用模拟。匹配。简而言之,它用(未导出)包装任意匹配器函数:mock.argumentMatcher参数Matcher 执行自定义参数匹配,返回参数是否与期望夹具函数匹配。特别是,的论点是:mock.MatchedBy[...]接受返回 bool 的单个参数(预期类型)的函数因此,您可以按如下方式使用它:personNameMatcher := mock.MatchedBy(func(p Person) bool {    return p.Name == "John"})d.AssertCalled(t, "doWithThing", personNameMatcher)
随时随地看视频慕课网APP

相关分类

Go
我要回答