模拟 clickhouse-go.driver.Row.Scan(dest ...any) 函数以嘲笑方式填充第一个参数

问题描述 投票:0回答:1

我正在使用模拟,我需要模拟

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()
函数,以便它用提供的值填充第一个参数。

如何才能做到?

go testing mocking
1个回答
0
投票

这段代码对我有用

row.EXPECT().Scan(mock.Anything).RunAndReturn(func(args ...any) error {
        mockArgs := mock.Arguments(args)
        arg, _ := mockArgs.Get(0).(*int64)
        *arg = 1
        return nil
})
© www.soinside.com 2019 - 2024. All rights reserved.