Sobes.tech
Middle+

Hoe test je de functie printNumber zonder een seconde te wachten?

sobes.tech AI

Antwoord van AI

Om de functie printNumber te testen, die intern time.Sleep(time.Second) aanroept, zonder daadwerkelijk een seconde te wachten, kun je afhankelijkheidsinjectie gebruiken voor de slaapfunctie. In plaats van direct time.Sleep aan te roepen in de code, geef je de slaapfunctie als parameter door of gebruik je een interface.

Voorbeeld:

package main

import (
    "fmt"
    "time"
)

type Sleeper func(d time.Duration)

func printNumber(sleep Sleeper, n int) {
    sleep(time.Second) // in plaats van direct time.Sleep aan te roepen
    fmt.Println(n)
}

// In de test, geef een mock:
func main() {
    fakeSleep := func(d time.Duration) {
        // doe niets om niet te wachten
    }
    printNumber(fakeSleep, 42) // zal meteen 42 printen
}

Op deze manier kan in tests de echte slaapfunctie worden vervangen door een lege functie, wat de tests versnelt en vertragingen voorkomt.