go sqlmock test MySQL批量插入

Go sqlmock test MySQL batch insert

我正在使用 GORM 批量插入 多行到 MySQL table 中,我想使用 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>))