我有一个数据库查询,它返回2个结果集,我想对执行此查询的go函数进行单元测试。
虽然我可以像这样添加和测试行:
myMockRows:=sqlmock.NewRows([]string{"col1","col2"}).AddRow("col1val1", "col2val2")
mock.ExpectQuery("my_stored_procedure").WithArgs(arg1, arg2).WillReturnRows(myMockRows)
我不确定如何在
rows
对象中创建多个结果集。我怎么做? 最佳答案
您必须将测试行放入struct
内,然后在loop
上执行struct
,如以下代码所示。
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)
}
})