database - 如何模拟 ping 命令

标签 database go mocking

我正在使用 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 addedgo-sqlmock,并包含在 v1.4.0 release 中.


原答案:

不,“没有相似之处”。 PingPingContext 方法取决于实现 Pinger 的驱动程序接口(interface),因此您不能通过例如期望“SELECT 1”或其他东西来模仿它。

already an issue要求添加这个。它似乎没有引起太多关注。我怀疑创建一个 PR(可能大约 3 行代码)会大大增加添加该功能的机会。


如果您的目标是使 Ping 失败,您应该能够通过连接到无效的数据库端点(使用或不使用 sqlmock)来模拟它。

关于database - 如何模拟 ping 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57723476/

相关文章:

go - Go 如何将 3 字节序列转换为适当的 Unicode 字符?

java - 什么是 Kotlin 函数类型的 Java 等价物?

testing - 如何仅针对一次测试覆盖 Angular 5 中的 Provider?

java - 调用 FileWriter 的单元测试方法

android - SQLite 异常 : no such table

mysql - 设计数据库表以在允许插入之前检查另一个表中的ID

go - 将包含文件句柄的 channel 传递给 goroutine 是不是一个坏主意?

json - Golang 中的多模式 JSON 验证

database - ORM 适合复杂的项目吗?

java - 如何使用带有用户、组和权限的简单权限系统的 JPA?