Sobes.tech
Middle+

Cum să testezi funcția printNumber fără a aștepta o secundă?

sobes.tech AI

Răspuns de la AI

Pentru a testa funcția printNumber, care apelează intern time.Sleep(time.Second), fără a aștepta efectiv o secundă, poți folosi injecția de dependență pentru funcția de somn. În loc să apelezi direct time.Sleep în cod, transmite funcția de somn ca parametru sau folosește o interfață.

Exemplu:

package main

import (
    "fmt"
    "time"
)

type Sleeper func(d time.Duration)

func printNumber(sleep Sleeper, n int) {
    sleep(time.Second) // în loc de apelul direct la time.Sleep
    fmt.Println(n)
}

// În test, se transmite un substitut:
func main() {
    fakeSleep := func(d time.Duration) {
        // nu facem nimic pentru a nu aștepta
    }
    printNumber(fakeSleep, 42) // va afișa 42 imediat
}

Astfel, în teste, se poate înlocui somnul real cu o funcție goală, ceea ce accelerează testarea și elimină întârzierile.