Sobes.tech
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.