- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我使用 go-sqlmock ( https://godoc.org/github.com/DATA-DOG/go-sqlmock ) 来测试接收可变数量参数的函数(为了简单起见,我简化了函数并删除了大部分代码):
func getHits(db *sql.DB, actions ...string) (hits []Hit, err error) {
// ...
query := `select * from table where action in (?,?)`
rows, err := db.Query(query, actions)
// ...
}
测试看起来像这样:
// rows := ...
actions := []string{"click", "event"}
mock.ExpectQuery(`^select .*`).WithArgs(actions).WillReturnRows(rows)
hits, err := getHits(db, actions...)
if mockErr := mock.ExpectationsWereMet(); mockErr != nil {
log.Fatalf("there were unfulfilled expections: %s", mockErr)
}
然后我得到这个输出:
2017/12/21 10:38:23 there were unfulfilled expections: there is a remaining expectation which was not matched: ExpectedQuery => expecting Query or QueryRow which:
- matches sql: '^select .*'
- is with arguments:
0 - [click event]
- should return rows: ...
如果我这样更改测试:
mock.ExpectQuery(`^select .*`).WithArgs(actions[0], actions[1]).WillReturnRows(rows)
然后我得到这个输出:
2017/12/21 10:44:41 there were unfulfilled expections: there is a remaining expectation which was not matched: ExpectedQuery => expecting Query or QueryRow which:
- matches sql: '^select .*'
- is with arguments:
0 - click
1 - event
- should return rows:
我唯一能让它通过的方法是调用:
db.Query(query, actions[0], actions[1])
这显然是我不想做的,因为我不知道操作的数量...
有人知道我该如何解决或调试这个问题吗?
最佳答案
使用 []interface{}
的已接受答案适用于字符串,但它可能会引发其他类型的错误。
简答
actions := []driver.Value{"click", "event"}
mock.ExpectQuery(`^select .*`).WithArgs(actions...).WillReturnRows(rows)
长答案
参数需要driver.Value
reference和 driver.Value 可以是其中之一 types :
所以,正确答案是
actions := []driver.Value{"click", "event"}
mock.ExpectQuery(`^select .*`).WithArgs(actions...).WillReturnRows(rows)
关于go - 如何使用带有可变数量参数的 go-sqlmock WithArgs()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47922204/
我正在尝试理解 smalltalk 中的方法“withArgs: executeMethod:”,吱。 1。我试图了解该方法的作用是什么?2. 需要传递什么参数才能执行? 最佳答案 理解此方法的一个好
我有一个正在 stub 的函数,该函数使用多个参数进行调用。我想检查仅第一个参数。其余的都是回调函数,所以我不想管它们。因此,我可能有以下 2 个调用,以 ajax 为例: method.get =
我的生产代码如下所示: exports.convertWord = number => { /* some logic here */ } exports.methodUnderTest = () =
我想在我的服务器端 javascript 中测试某个函数是否以某种方式被调用。我正在使用 Sinon 模拟和 stub 。 Sinon 有 withArgs() 方法,用于检查函数是否使用特定参数调用
我使用 go-sqlmock ( https://godoc.org/github.com/DATA-DOG/go-sqlmock ) 来测试接收可变数量参数的函数(为了简单起见,我简化了函数并删除了
我正在尝试使用 WithArg在一些测试代码中。我尝试编译的代码如下所示: using ::testing::_; using ::testing::Invoke; using ::testing::
当我为 sinon spy 或 stub 指定 withArgs 时,我希望 callCount 只计算带有这些参数的调用。不过,这似乎并没有发生。 如果我运行以下命令: var mySpy = si
我正在尝试创建一个单元测试来测试我的代码创建的对象是否已成功发送到更新函数(当前不测试更新函数,因为这将是集成测试)。 我想做的是使用 sinon 模拟来检查更新方法的输入是否正确: var obje
我是 js 单元测试的新手,对使用 withArgs 进行 stub 有疑问。 我有一些名为“create”的通用外部函数,我只想为某种参数和原始“create”的其他返回值 stub 它。例如: s
我有一个模拟函数: MOCK_METHOD4(my_func, int(double, double, void* (*cb) (int), int p1)); 我想以第三个参数作为参数调用上述函数的
我是一名优秀的程序员,十分优秀!