I'm setting unit test for api(golang).
I try to set mocking, but there is compile error.
I want to resolve this error to run test.
article
├ client
├ api
│ ├ main.go
│ ├ contoroller
│ │ ├ contoroller.go
│ │ └ contoroller_test.go
│ ├ service
│ │ ├ service.go
│ │ └ service_test.go
│ ├ dao
│ │ ├ dao.go
│ │ └ dao_test.go
│ ├ s3
│ │ ├ s3.go
│ │ └ s3_test.go
│ ├ go.mod
│ ├ go.sum
│ └ Dockerfile
├ nginx
└ docker-compose.yml
Now I'm trying to set dao_test.go
.
But compile error occurs in dao_test.go
at SetupTest()
.
dao_test.go
package dao
//import
type MockDaoInterface struct {
}
func (_m *MockDaoInterface) DeleteS3Image(imageName util.ImageName) error {
return nil
}
type DaoSuite struct {
suite.Suite
db *sql.DB
mock sqlmock.Sqlmock
s3 s3.DaoInterface
dao *Dao
}
func (s *DaoSuite) SetupTest() {
var err error
s.db, s.mock, err = sqlmock.New()
s.Require().NoError(err)
s.dao = NewDao(s.db, s.s3)
// here error occurs
s.dao.s3 = MockDaoInterface{}
}
func (s *DaoSuite) TestDeleteArticleDao() {
// some codes
s.dao.DeleteArticleDao("1")
}
dao.go
package dao
// import
type Dao struct {
database *sql.DB
s3 s3.DaoInterface
}
func NewDao(database *sql.DB, s3 s3.DaoInterface) *Dao {
objs := &Dao{database: database, s3: s3}
return objs
}
func (d *Dao) DeleteArticleDao(id string) {
d.s3.DeleteS3Image(imageName)
}
s3.go
package s3
//import
type S3 struct {
APPID string
SECRET string
}
type DaoInterface interface {
DeleteS3Image(imageName util.ImageName) error
}
func NewS3(appid, secret string) *S3 {
objs := &S3{APPID: appid, SECRET: secret}
return objs
}
func (objs *S3) DeleteS3Image(imageName util.ImageName) error {
// method
}
The full source code is here(fix-test-dao):
https://github.com/jpskgc/article/tree/fix-test-dao
I expect there is not compile error in dao_test.go
at SetupTest()
.
But the actual is not.
I want to resolve error and make test success.
Here is the error message.
type MockDaoInterface struct{Mock}
cannot use MockDaoInterface literal (type MockDaoInterface) as type s3.DaoInterface in assignment:
MockDaoInterface does not implement s3.DaoInterface (DeleteS3Image method has pointer receiver)