速度制限をかけているコードの実行に要した処理時間を計測すれば良い。
package main
import (
"context"
"fmt"
"testing"
"time"
"golang.org/x/time/rate"
)
func TestWait(t *testing.T) {
r := rate.Every(time.Second / 10)
b := 1
limiter := rate.NewLimiter(r, b)
ctx := context.Background()
tests := []struct {
name string
n int
}{
{
name: "n = 10",
n: 10,
},
{
name: "n = 11",
n: 11,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t0 := time.Now()
for i := 0; i < tt.n; i++ {
if err := limiter.Wait(ctx); err != nil {
}
}
t1 := time.Now()
elapsed := t1.Sub(t0).Seconds()
if elapsed < 1.0 {
t.Errorf("must take > 1.0 sec, but took %f sec", elapsed)
}
fmt.Printf("took %f sec\n", elapsed)
})
}
}
https://play.golang.org/p/lnrqdM3FI5c