错误:suite.go:61:测试恐慌:反映:调用时输入参数太少

时间:2019-09-09 05:37:04

标签: unit-testing go testify

我正在['@@', '$$', '><', '....', '^'] 中设置单元测试。
但是现在我在运行golang时遇到错误。
我想解决此错误并使测试成功。

go test -v

现在我要为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 设置service_test.go

service_test.go

service.go

service.go

package service

// import

type MockDaoInterface struct {
}

func (_m *MockDaoInterface) GetArticleDao() *sql.Rows {
    db, mock, _ := sqlmock.New()
    mockRows := mock.NewRows([]string{"id", "uuid", "title", "content"}).
        AddRow(1, "bea1b24d-0627-4ea0-aa2b-8af4c6c2a41c", "test", "test").
        AddRow(2, "844bc620-7336-41a3-9cb4-552a0024ff1c", "test2", "test2")
    mock.ExpectQuery("select").WillReturnRows(mockRows)
    rows, _ := db.Query("select")
    return rows
}


type ServiceSuite struct {
    suite.Suite
    service *Service
    dao     dao.DaoInterface
}

func (s *ServiceSuite) SetupTest() {
    s.service = NewService(s.dao)
    s.service.dao = &MockDaoInterface{}
}

func (s *ServiceSuite) TestGetArticleService(t *testing.T) {

    articles := s.service.GetArticleService()

    var expectedArticles []util.Article

    expectedArticle1 := util.Article{
        ID:      1,
        UUID:    "bea1b24d-0627-4ea0-aa2b-8af4c6c2a41c",
        TITLE:   "test",
        CONTENT: "test",
    }
    expectedArticles = append(expectedArticles, expectedArticle1)

    expectedArticle2 := util.Article{
        ID:      2,
        UUID:    "844bc620-7336-41a3-9cb4-552a0024ff1c",
        TITLE:   "test2",
        CONTENT: "test2",
    }
    expectedArticles = append(expectedArticles, expectedArticle2)

    assert.Equal(s.T(), expectedArticles, articles)
}

func TestServiceSuite(t *testing.T) {
    suite.Run(t, new(ServiceSuite))
}

dao.go

package service

// import 

type Service struct {
    dao dao.DaoInterface
}

func NewService(dao dao.DaoInterface) *Service {
    return &Service{dao: dao}
}

func (s Service) GetArticleService() []util.Article {
    var articles []util.Article

    results := s.dao.GetArticleDao()

    article := util.Article{}
    for results.Next() {
        err := results.Scan(&article.ID, &article.UUID, &article.TITLE, &article.CONTENT)
        if err != nil {
            panic(err.Error())
        } else {
            articles = append(articles, article)
        }
    }
    return articles
}

这是完整的源代码(分支:go-test-service)
https://github.com/jpskgc/article/tree/go-test-service

我希望package dao // import type Dao struct { database *sql.DB s3 s3.S3Interface } func NewDao(database *sql.DB, s3 s3.S3Interface) *Dao { objs := &Dao{database: database, s3: s3} return objs } type DaoInterface interface { GetArticleDao() *sql.Rows } 成功测试。
但实际上是失败并出现错误。
我想解决此错误并进行成功测试。

service_test.go

1 个答案:

答案 0 :(得分:-2)

此问题已解决,方法是将t *testing.T从伪钞中删除。

func (s *ServiceSuite) TestGetArticleService() {
// some code
}
相关问题