Sobes.tech
Middle+

Jak otestovat funkci printNumber bez čekání sekundy?

sobes.tech AI

Odpověď od AI

Pro otestování funkce printNumber, která interně volá time.Sleep(time.Second), aniž by skutečně čekala sekundu, můžete použít injekci závislosti pro funkci spánku. Místo přímého volání time.Sleep v kódu předávejte funkci spánku jako parametr nebo použijte rozhraní.

Příklad:

package main

import (
    "fmt"
    "time"
)

type Sleeper func(d time.Duration)

func printNumber(sleep Sleeper, n int) {
    sleep(time.Second) // místo přímého volání time.Sleep
    fmt.Println(n)
}

// V testu předáte náhražku:
func main() {
    fakeSleep := func(d time.Duration) {
        // neděláme nic, abychom nečekali
    }
    printNumber(fakeSleep, 42) // ihned vypíše 42
}

Tímto způsobem lze v testech nahradit skutečný spánek prázdnou funkcí, což urychlí testování a odstraní zpoždění.