我正在使用 https://github.com/DATA-DOG/go-sqlmock 并尝试模拟与数据库的连接。
现在,我需要模拟一个 ping 命令(用于负载平衡目的)。但是,我找不到有关如何执行此操作的任何信息。
比如我想写一个这样的测试
db, mock, _ := sqlmock.New()
// ExpectPing does not exist, but it is there anything similar?
mock.ExpectPing().WillReturnError("mock error")
err := db.Ping()
if err==nil{
t.Fatal("there should have been an error")
}
此外,我需要将这个模拟对象注入(inject)到一个函数中。假设 New(*sql.DB) 输出一个新结构。所以它必须与 *sql.DB 结构兼容。出于这个原因,sqlmock 似乎是一个不错的选择。但是,我还没有找到模拟 ping 命令的方法。
有没有办法使用这个库来做到这一点? 如果没有,是否有任何其他数据库/sql 模拟库可以做到这一点?
最佳答案
更新:自 2020 年 1 月 6 日起,此功能 has been added到 go-sqlmock
,并包含在 v1.4.0 release 中.
原答案:
不,“没有相似之处”。 Ping
和 PingContext
方法取决于实现 Pinger
的驱动程序接口(interface),因此您不能通过例如期望“SELECT 1”或其他东西来模仿它。
有already an issue要求添加这个。它似乎没有引起太多关注。我怀疑创建一个 PR(可能大约 3 行代码)会大大增加添加该功能的机会。
如果您的目标是使 Ping 失败,您应该能够通过连接到无效的数据库端点(使用或不使用 sqlmock)来模拟它。
关于database - 如何模拟 ping 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723476/