package utils_test import ( "testing" "time" "git.huangwc.com/pig/pig-farm-controller/internal/infra/utils" ) func TestGetNextCronTime(t *testing.T) { tests := []struct { name string expression string expectError bool }{ { name: "标准5位cron表达式", expression: "0 15 10 * * *", expectError: false, }, { name: "带秒的6位cron表达式", expression: "30 0 15 10 * *", expectError: false, }, { name: "带'?'通配符的cron表达式", expression: "0 15 10 * * ?", expectError: false, }, { name: "带秒和'?'通配符的cron表达式", expression: "30 0 15 10 * ?", expectError: false, }, { name: "无效的cron表达式", expression: "invalid-cron", expectError: true, }, { name: "每秒执行", expression: "* * * * * *", expectError: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { nextTime, err := utils.GetNextCronTime(tt.expression) if tt.expectError { if err == nil { t.Errorf("期望得到一个错误,但没有得到") } } else { if err != nil { t.Errorf("不期望得到错误,但得到了: %v", err) } if nextTime.IsZero() { t.Errorf("期望得到一个有效的下一次执行时间,但得到了零值时间") } // 可以在这里添加更具体的断言来验证时间是否在预期范围内 if !nextTime.After(time.Now()) { t.Errorf("期望的下一次执行时间 %v 应该在当前时间之后", nextTime) } } }) } }