99 lines
2 KiB
Go
99 lines
2 KiB
Go
package testutils
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// TestTimer mesure la durée d'un test (T0050)
|
|
type TestTimer struct {
|
|
start time.Time
|
|
t *testing.T
|
|
name string
|
|
}
|
|
|
|
// StartTimer démarre un timer de test (T0050)
|
|
func StartTimer(t *testing.T) *TestTimer {
|
|
return &TestTimer{
|
|
start: time.Now(),
|
|
t: t,
|
|
name: t.Name(),
|
|
}
|
|
}
|
|
|
|
// StartNamedTimer démarre un timer avec un nom personnalisé (T0050)
|
|
func StartNamedTimer(t *testing.T, name string) *TestTimer {
|
|
return &TestTimer{
|
|
start: time.Now(),
|
|
t: t,
|
|
name: name,
|
|
}
|
|
}
|
|
|
|
// Stop arrête le timer et log la durée (T0050)
|
|
func (tt *TestTimer) Stop() time.Duration {
|
|
duration := time.Since(tt.start)
|
|
tt.t.Logf("Test duration: %v", duration)
|
|
return duration
|
|
}
|
|
|
|
// WarnIfSlow avertit si le test est lent (T0050)
|
|
func (tt *TestTimer) WarnIfSlow(threshold time.Duration) time.Duration {
|
|
duration := tt.Stop()
|
|
if duration > threshold {
|
|
tt.t.Logf("WARNING: Test '%s' took %v (threshold: %v)", tt.name, duration, threshold)
|
|
}
|
|
return duration
|
|
}
|
|
|
|
// Elapsed retourne la durée écoulée sans arrêter le timer (T0050)
|
|
func (tt *TestTimer) Elapsed() time.Duration {
|
|
return time.Since(tt.start)
|
|
}
|
|
|
|
// Reset réinitialise le timer (T0050)
|
|
func (tt *TestTimer) Reset() {
|
|
tt.start = time.Now()
|
|
}
|
|
|
|
// Example usage:
|
|
/*
|
|
func TestSlowOperation(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
defer timer.WarnIfSlow(5 * time.Second)
|
|
|
|
// Test code
|
|
time.Sleep(2 * time.Second)
|
|
}
|
|
|
|
func TestNamedTimer(t *testing.T) {
|
|
timer := StartNamedTimer(t, "database-operation")
|
|
defer timer.WarnIfSlow(3 * time.Second)
|
|
|
|
// Test code
|
|
}
|
|
|
|
func TestMultipleOperations(t *testing.T) {
|
|
timer := StartTimer(t)
|
|
defer timer.Stop()
|
|
|
|
// First operation
|
|
operation1(timer)
|
|
|
|
// Reset for second operation
|
|
timer.Reset()
|
|
operation2(timer)
|
|
}
|
|
|
|
func operation1(timer *TestTimer) {
|
|
// Operation 1 code
|
|
duration := timer.Elapsed()
|
|
timer.t.Logf("Operation 1 took: %v", duration)
|
|
}
|
|
|
|
func operation2(timer *TestTimer) {
|
|
// Operation 2 code
|
|
duration := timer.Elapsed()
|
|
timer.t.Logf("Operation 2 took: %v", duration)
|
|
}
|
|
*/
|