package coroutine import ( "fmt" "testing" "time" ) func TestFixed_Run(t *testing.T) { tests := []struct { name string count int taskCnt int expectedMinMill time.Duration expectedMaxMill time.Duration }{ { name: "超过时阻塞 100ms", count: 1, taskCnt: 2, expectedMinMill: 100 * time.Millisecond, }, { name: "超过时阻塞 200ms", count: 1, taskCnt: 3, expectedMinMill: 200 * time.Millisecond, }, { name: "相等限制时不阻塞", count: 3, taskCnt: 3, expectedMaxMill: 10 * time.Millisecond, }, { name: "低于限制时不阻塞", count: 4, taskCnt: 3, expectedMaxMill: 10 * time.Millisecond, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { f := NewFixed(tt.count) start := time.Now() for i := 0; i < tt.taskCnt; i++ { f.Run("test", func() { time.Sleep(100 * time.Millisecond) }) } end := time.Now() milliseconds := end.Sub(start).Milliseconds() if tt.expectedMinMill > 0 && milliseconds < tt.expectedMinMill.Milliseconds() { t.Errorf("运行时长最少 %d ms, 实际 %d ms", tt.expectedMinMill, milliseconds) } if tt.expectedMaxMill > 0 && milliseconds > tt.expectedMaxMill.Milliseconds() { t.Errorf("运行时长不超过 %d ms, 实际 %d ms", tt.expectedMaxMill, milliseconds) } fmt.Println(milliseconds) }) } }