请考虑 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)
- 1 回答
- 0 关注
- 83 浏览
添加回答
举报
0/150
提交
取消