【发布时间】:2018-03-04 14:11:35
【问题描述】:
我正在使用 go lang 测试在 for 循环中运行具有多个参数的测试。
我遇到了每次调用模拟时都返回相同的返回值(和第一个集合)的情况。我想要做的是在输入相同时更改每个测试的返回值,即循环中相同的On 但不同的Return。
我正在使用stretchr/testify 进行模拟。当On 相同时,它看起来不会覆盖已创建的模拟。
func TestUpdateContactWithNewActions(t *testing.T) {
tests := []struct {
testName string
getParams func() *activities.UpdateContactWithNewActionsActivity
mockError error
}{
{"UpdateContactWithNewActions with error from contact service",
func() *activities.UpdateContactWithNewActionsActivity {
return fixtures.GetUpdateContactWithNewActionsActivity()
}, fixtures.Err},
{"UpdateContactWithNewActions valid",
func() *activities.UpdateContactWithNewActionsActivity {
return fixtures.GetUpdateContactWithNewActionsActivity()
}, nil},
}
lib.LoadWithMockClients()
for _, test := range tests {
test := test
t.Run(test.testName, func(t *testing.T) {
lib.MockCSClient.On(
"UpdateContactWithNewActions",
mock.AnythingOfType("tchannel.headerCtx"),
fixtures.UpdateContactWithNewActions).Return(test.mockError)
returnedResult, err := test.getParams().Execute(fixtures.Ctx)
if test.mockError == nil {
// some assertion
}
assert.Error(t, err)
})
}
}
【问题讨论】:
-
你使用什么包提供这个
On方法?似乎这就是问题所在,而不是 Go 本身。 -
拉伸/作证
-
看起来库只是附加到一个内部列表,所以当方法被调用时,它总是匹配注册的第一个返回结果。您是否考虑过为每次测试运行使用新的模拟?
-
我考虑过,但不要认真尝试,因为
MockCSClient在我的测试中创建的方式。但这是个好主意,我会试试的。 -
嘿,您找到解决方案了吗?
标签: unit-testing go testify