我正在使用GORM批量插入将多个行放入MySQL表中,我想使用sqlmock测试行为是否正确。我没有在网上找到任何关于用sqlmock模拟批处理插入的内容。
对于插入单行,我们将有类似的内容:
mock.ExpectExec("INSERT INTO product_viewers").WithArgs(2, 3).WillReturnResult(sqlmock.NewResult(1, 1))
但是如何将多行值传递给ExpectExec
以表示批处理插入?
mock.ExpectExec("INSERT INTO product_viewers").WithArgs(???).WillReturnResult(sqlmock.NewResult(*numInsertedRows*, *numInsertedRows*))
答案是,至少对于MySQL来说,sqlmock不会在不同的行和列之间产生差异,因此您可以在.WithArgs
中列出所有行的所有值,一个接一个,用逗号分隔。
。
mock.ExpectExec("INSERT INTO product_viewers").
WithArgs(row1col1, row1col2, row2col1, row2col2, ...).
WillReturnResult(sqlmock.NewResult(<numInsertedRows>, <numInsertedRows>))