我正在使用模拟,我需要模拟
clickhouse-go.driver.Row.Scan(dest ...any)
函数来用给定的数据填充第一个参数。就我而言,代码如下所示:
func Test_1(test *testing.T) {
test.Parallel()
ch := ch_mock.NewMockConn(test)
row := ch_mock.NewMockRow(test)
row.EXPECT().Scan(mock.AnythingOfType("*int64")).RunAndReturn(func(args ...any) error {
args[0] = 1
return nil
})
ch.EXPECT().QueryRow(mock.Anything, mock.Anything).Return(row)
...(inject the ch object into the code i'm actually testing)
}
Scan
函数在我正在测试的代码中内部使用,当调用它时 - 1的值不会传递到给定的参数中:
var avg int64
if err := row.Scan(&avg); err != nil {
....
}
fmt.Println(avg) // prints 0 (the default value)
我没想到这会起作用,但这是我目前最好的。我想模拟
Scan()
函数,以便它用提供的值填充第一个参数。
如何才能做到?
这段代码对我有用
row.EXPECT().Scan(mock.Anything).RunAndReturn(func(args ...any) error {
mockArgs := mock.Arguments(args)
arg, _ := mockArgs.Get(0).(*int64)
*arg = 1
return nil
})