jps*_*.v3 6 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
Run Code Online (Sandbox Code Playgroud)
现在我正在service_test.go
为service.go
.
service_test.go
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
Run Code Online (Sandbox Code Playgroud)
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))
}
Run Code Online (Sandbox Code Playgroud)
道去
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
}
Run Code Online (Sandbox Code Playgroud)
这是完整的源代码(分支:go-test-service)
https://github.com/jpskgc/article/tree/go-test-service
我期待service_test.go
成功测试。
但实际情况是它因错误而失败。
我想解决这个错误并成功测试。
$ go test -v
=== RUN TestServiceSuite
=== RUN TestServiceSuite/TestGetArticleService
--- FAIL: TestServiceSuite (0.00s)
--- FAIL: TestServiceSuite/TestGetArticleService (0.00s)
suite.go:61: test panicked: reflect: Call with too few input arguments
FAIL
exit status 1
FAIL article/api/service 0.045s
Run Code Online (Sandbox Code Playgroud)
jps*_*.v3 14
它通过t *testing.T
从 aurgument 中删除来解决。
func (s *ServiceSuite) TestGetArticleService() {
// some code
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2128 次 |
最近记录: |