我是sqlmock的新手。想为下面的功能编写模拟。但我是
收到错误消息“未预期会调用查询,下一个期望是:
ExpectedPrepare =>期望Prepare语句:匹配sql“
我需要帮助以了解上述错误的原因。要么 我该如何为下面的函数编写模拟?
我的代码看起来与此类似
>>>>>>>>>Request.go<<<<<<<<<<<<<<
type Request struct{
Username string `gorm:"column:username" json:"USerName"`
Status string `gorm:"column:status" json:"Status"`
}
func (p *Request) TableName() string {
return "requests"
}
//function which needs to be mocked
type Repository interface {
GetRequestDetails(user string)(*Request,error)
}
type repo struct {
DB *gorm.DB
}
func (p *repo) GetRequestDetails(user string)(*Request,error){
request := new(Request)
err := p.DB.Select("*").Where("username = ?", user).Find(request ).Error
return request,err
}
func CreateRepository(db *gorm.DB) Repository {
return &repo{
DB: db,
}
}
>>>>>>>>>RequestTest.go>>>>>>>>>>>>>>>>>>>>>>>>
type Suite struct {
suite.Suite
DB *gorm.DB
mock sqlmock.Sqlmock
repository Repository
request *Request
}
func (s *Suite) SetupSuite() {
var (
db *sql.DB
err error
)
db, s.mock, err = sqlmock.New()
require.NoError(s.T(), err)
s.DB, err = gorm.Open("mysql", db)
require.NoError(s.T(), err)
s.DB.LogMode(true)
s.repository = CreateRepository(s.DB)
}
func TestInit(t *testing.T) {
suite.Run(t, new(Suite))
}
//testing function
func (s *Suite) Test_repository_Get(){
rows := sqlmock.NewRows([]string{"username", "status"}).
AddRow("post 1", "hello").
AddRow("post 2", "world")
s.mock.ExpectPrepare("SELECT * FROM requests WHERE username = ?").ExpectQuery().WithArgs("post 1").WillReturnRows(rows)
res,_ := s.repository.GetRequestDetails("post 1")
require.NoError(s.T(), err)
fmt.Println(res)
}
出现错误,但原因是什么?如何修改上面的实现以使其起作用