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)
