Middle+
Hoe test je de functie printNumber zonder een seconde te wachten?
sobes.tech AI
Antwoord van AI
Om de functie printNumber te testen, die intern time.Sleep(time.Second) aanroept, zonder daadwerkelijk een seconde te wachten, kun je afhankelijkheidsinjectie gebruiken voor de slaapfunctie. In plaats van direct time.Sleep aan te roepen in de code, geef je de slaapfunctie als parameter door of gebruik je een interface.
Voorbeeld:
package main
import (
"fmt"
"time"
)
type Sleeper func(d time.Duration)
func printNumber(sleep Sleeper, n int) {
sleep(time.Second) // in plaats van direct time.Sleep aan te roepen
fmt.Println(n)
}
// In de test, geef een mock:
func main() {
fakeSleep := func(d time.Duration) {
// doe niets om niet te wachten
}
printNumber(fakeSleep, 42) // zal meteen 42 printen
}
Op deze manier kan in tests de echte slaapfunctie worden vervangen door een lege functie, wat de tests versnelt en vertragingen voorkomt.