Middle+
Jak przetestować funkcję printNumber bez oczekiwania sekundy?
sobes.tech AI
Odpowiedź od AI
Aby przetestować funkcję printNumber, która wewnątrz wywołuje time.Sleep(time.Second), bez rzeczywistego oczekiwania sekundy, można użyć wstrzykiwania zależności dla funkcji snu. Zamiast bezpośrednio wywoływać time.Sleep w kodzie, przekaż funkcję snu jako parametr lub użyj interfejsu.
Przykład:
package main
import (
"fmt"
"time"
)
type Sleeper func(d time.Duration)
func printNumber(sleep Sleeper, n int) {
sleep(time.Second) // zamiast bezpośredniego wywołania time.Sleep
fmt.Println(n)
}
// W teście przekazujemy atrapę:
func main() {
fakeSleep := func(d time.Duration) {
// nic nie rób, żeby nie czekać
}
printNumber(fakeSleep, 42) // od razu wyświetli 42
}
W ten sposób, w testach można zamienić rzeczywisty sen na pustą funkcję, co przyspiesza testowanie i eliminuje opóźnienia.