Middle+
Wie testet man die Funktion printNumber, ohne eine Sekunde zu warten?
sobes.tech KI
Antwort von AI
Um die Funktion printNumber zu testen, die intern time.Sleep(time.Second) aufruft, ohne tatsächlich eine Sekunde zu warten, kann man Dependency Injection für die Schlaffunktion verwenden. Anstatt direkt time.Sleep im Code aufzurufen, übergeben Sie die Schlaffunktion als Parameter oder verwenden Sie eine Schnittstelle.
Beispiel:
package main
import (
"fmt"
"time"
)
type Sleeper func(d time.Duration)
func printNumber(sleep Sleeper, n int) {
sleep(time.Second) // anstelle des direkten Aufrufs von time.Sleep
fmt.Println(n)
}
// Im Test übergeben Sie eine Platzhalterfunktion:
func main() {
fakeSleep := func(d time.Duration) {
// macht nichts, um nicht zu warten
}
printNumber(fakeSleep, 42) // gibt sofort 42 aus
}
Auf diese Weise kann im Test die echte Schlaffunktion durch eine leere Funktion ersetzt werden, was die Tests beschleunigt und Verzögerungen vermeidet.