init
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
package unit
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
)
|
||||
|
||||
// PaginationTestSuite 分页测试套件
|
||||
type PaginationTestSuite struct {
|
||||
suite.Suite
|
||||
}
|
||||
|
||||
func TestPaginationTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(PaginationTestSuite))
|
||||
}
|
||||
|
||||
func (s *PaginationTestSuite) SetupTest() {
|
||||
}
|
||||
|
||||
func (s *PaginationTestSuite) TearDownTest() {
|
||||
}
|
||||
|
||||
// paginateSlice 模拟分页函数
|
||||
func paginateSlice[T any](slice []T, page, pageSize int) ([]T, int64) {
|
||||
total := int64(len(slice))
|
||||
if total == 0 {
|
||||
return []T{}, 0
|
||||
}
|
||||
|
||||
start := (page - 1) * pageSize
|
||||
end := start + pageSize
|
||||
|
||||
if start >= len(slice) {
|
||||
return []T{}, total
|
||||
}
|
||||
|
||||
if end > len(slice) {
|
||||
end = len(slice)
|
||||
}
|
||||
|
||||
return slice[start:end], total
|
||||
}
|
||||
|
||||
// validatePagination 模拟分页参数验证
|
||||
func validatePagination(page, pageSize int) (int, int) {
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize < 1 {
|
||||
pageSize = 10
|
||||
}
|
||||
const maxPageSize = 100
|
||||
if pageSize > maxPageSize {
|
||||
pageSize = maxPageSize
|
||||
}
|
||||
return page, pageSize
|
||||
}
|
||||
|
||||
// TestPaginateSlice_EmptySlice 测试空切片
|
||||
func (s *PaginationTestSuite) TestPaginateSlice_EmptySlice() {
|
||||
result, total := paginateSlice([]int{}, 1, 10)
|
||||
|
||||
s.Empty(result)
|
||||
s.Equal(int64(0), total)
|
||||
}
|
||||
|
||||
// TestPaginateSlice_FirstPage 测试第一页
|
||||
func (s *PaginationTestSuite) TestPaginateSlice_FirstPage() {
|
||||
slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
result, total := paginateSlice(slice, 1, 3)
|
||||
|
||||
s.Equal([]int{1, 2, 3}, result)
|
||||
s.Equal(int64(10), total)
|
||||
}
|
||||
|
||||
// TestPaginateSlice_MiddlePage 测试中间页
|
||||
func (s *PaginationTestSuite) TestPaginateSlice_MiddlePage() {
|
||||
slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
result, total := paginateSlice(slice, 2, 3)
|
||||
|
||||
s.Equal([]int{4, 5, 6}, result)
|
||||
s.Equal(int64(10), total)
|
||||
}
|
||||
|
||||
// TestPaginateSlice_LastPage 测试最后一页(不满)
|
||||
func (s *PaginationTestSuite) TestPaginateSlice_LastPage() {
|
||||
slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
|
||||
result, total := paginateSlice(slice, 4, 3)
|
||||
|
||||
s.Equal([]int{10}, result)
|
||||
s.Equal(int64(10), total)
|
||||
}
|
||||
|
||||
// TestPaginateSlice_OutOfRange 测试超出范围的页码
|
||||
func (s *PaginationTestSuite) TestPaginateSlice_OutOfRange() {
|
||||
slice := []int{1, 2, 3, 4, 5}
|
||||
result, total := paginateSlice(slice, 10, 3)
|
||||
|
||||
s.Empty(result)
|
||||
s.Equal(int64(5), total)
|
||||
}
|
||||
|
||||
// TestValidatePagination 测试分页参数验证
|
||||
func (s *PaginationTestSuite) TestValidatePagination() {
|
||||
tests := []struct {
|
||||
name string
|
||||
page int
|
||||
pageSize int
|
||||
wantPage int
|
||||
wantPageSize int
|
||||
}{
|
||||
{"正常值", 1, 10, 1, 10},
|
||||
{"page 小于 1", 0, 10, 1, 10},
|
||||
{"page 为负数", -5, 10, 1, 10},
|
||||
{"pageSize 小于 1", 1, 0, 1, 10},
|
||||
{"pageSize 超过最大值", 1, 200, 1, 100},
|
||||
{"两者都异常", -1, -1, 1, 10},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
s.Run(tt.name, func() {
|
||||
gotPage, gotPageSize := validatePagination(tt.page, tt.pageSize)
|
||||
s.Equal(tt.wantPage, gotPage)
|
||||
s.Equal(tt.wantPageSize, gotPageSize)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user