首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在go-sqlmock中添加多个结果集?

如何在go-sqlmock中添加多个结果集?
EN

Stack Overflow用户
提问于 2018-07-06 14:51:31
回答 3查看 3.6K关注 0票数 4

我有一个db查询,它返回两个结果集,我想对执行此查询的go函数进行单元测试。虽然我可以添加和测试这样的行:

代码语言:javascript
复制
myMockRows:=sqlmock.NewRows([]string{"col1","col2"}).AddRow("col1val1", "col2val2")
mock.ExpectQuery("my_stored_procedure").WithArgs(arg1, arg2).WillReturnRows(myMockRows)

我不知道如何在我的rows对象中创建多个结果集。我该怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-07 21:13:53

做这样的事:

代码语言:javascript
复制
myMockRows:=sqlmock.NewRows([]string{"col1","col2"}).AddRow("col1val1", "col2val2")
myMockRows2:=sqlmock.NewRows([]string{"col3","col4"}).AddRow("col3val1", "col4val2")
mock.ExpectQuery("my_stored_procedure").WithArgs(arg1, arg2).WillReturnRows(myMockRows, myMockRows2)

因为WillReturnRows接受多个行对象并形成一个片,所以使用它来构造下一个结果集。

票数 2
EN

Stack Overflow用户

发布于 2020-11-27 07:46:18

“我已经试过了,”尼基尔·范达纳布(Nikhil Vandanapu)回答,但我并没有得到想要的结果。由于某种原因,只忽略了myMockRowsmyMockRows2。我做了一些阅读,我们可以执行以下操作来使它返回多个行。

代码语言:javascript
复制
myMockRows:=sqlmock.NewRows([]string{"col1","col2"})
.AddRow("col1val1", "col2val2")
.AddRow("col1val1", "col2val2")

mock.ExpectQuery("my_stored_procedure").WillReturnRows(myMockRows)

根据戈多的说法。值片返回相同的实例来执行后续的操作。

如果希望更容易地阅读主题,请添加此博客帖子

票数 5
EN

Stack Overflow用户

发布于 2018-07-06 15:24:21

您必须在struct中获取测试行,然后像下面的代码一样在struct上执行loop

代码语言:javascript
复制
 type args struct {
        val string
 }

 tests := []struct {
            name    string
            s       *<YourDBstruct>
            args    args
            wantErr bool
        }{
            {
                name:    "Test with correct value1",
                s:       &YourDBstruct{db},
                args:    args{"Val1"}
                wantErr: true,
            },
            {
                name:    "Test with correct value2",
                s:       &YourDBstruct{db},
                args:    args{"Val2"}
                wantErr: true,
            },
            {
                name:    "Test with correct valueN",
                s:       &YourDBstruct{db},
                args:    args{"ValN"}
                wantErr: true,
            },
        }
        for _, tt := range tests {
            t.Run(tt.name, func(t *testing.T) {
                mock.ExpectExec("my_stored_procedure")
                if err := tt.s.YourStoreFuncName(); (err != nil) != tt.wantErr {
                    t.Errorf("YourStoreFuncName() error = %v, wantErr %v", err, tt.wantErr)
                }
            })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51212986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档