为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号