gpt4 book ai didi

unit-testing - 如何在golang中的for循环中模拟相同的输入和不同的返回值

转载 作者:行者123 更新时间:2023-12-01 19:15:54 24 4
gpt4 key购买 nike

我正在使用go lang测试在for循环中使用多个参数运行测试。

我遇到了这样的情况,每次调用模拟时都会返回相同的返回值(和第一个集合)。我想做的是在循环中输入相同时,即相同的On但不同的Return,更改每个测试的返回值。

我正在使用担架/作证进行模拟。当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)
})
}
}

最佳答案

我有一个类似的问题。
解决方法是Once()方法
在您的模拟中添加一个.Once(),然后对每个所需结果重复该模拟。
像这样:

lib.Mock.On("method", arg).Return(test.mockError).Once()
lib.Mock.On("method", arg).Return(nil).Once()
每个模拟结果将仅返回一次。
https://godoc.org/github.com/stretchr/testify/mock#Call.Once

关于unit-testing - 如何在golang中的for循环中模拟相同的输入和不同的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46374174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com