2017-01-15 7 views
0

Also ich bin neu zu testen im Allgemeinen und ich bin stecken geblieben versuchen, einen Test für eine Funktion schreiben, die eine andere Funktion auslöst. Das ist, was ich habe so weit, aber es ist ein bisschen nach hinten und blockiert immer, wenn die Funktion nicht ausgeführt:Test, um zu prüfen, ob eine Funktion nicht ausgeführt wurde?

var cha = make(chan bool, 1)     

func TestFd(t *testing.T) {     
    c := &fd.Fdcount{Interval: 1, MaxFiles: 1} 
    c.Start(trigger) 
    if <- cha {        

    }           
}           

func trigger(i int) {      
    cha <- true        
}    

c.Start die trigger() Funktion auslösen, wenn bestimmte Kriterien erfüllt sind. Er prüft, ob die Kriterien alle 1 Sekunde erfüllt sind oder nicht.

Der Fehlerfall tritt ein, wenn die Funktion nicht ausgeführt werden kann. Gibt es eine Möglichkeit, dies zu testen, oder gibt es eine Möglichkeit, das Testpaket zum Testen auf Erfolg zu verwenden (z. B. t.Pass())?

Antwort

2

Wenn c.Start synchron ist, können Sie einfach eine Funktion übergeben, die einen Wert im Gültigkeitsbereich des Testfalls festlegt, und dann mit diesem Wert testen. Condider die functionCalled Variable in dem folgenden Beispiel, dass durch die trigger Funktion (playground) gesetzt ist:

func TestFd(t *testing.T) { 
    functionCalled := false 
    trigger := func(i int) { 
     functionCalled = true; 
    } 

    c := &fd.Fdcount{Interval: 1, MaxFiles: 1} 
    c.Start(trigger) 

    if !functionCalled { 
     t.FatalF("function was not called") 
    } 
} 

Wenn c.Start ist asynchron, können Sie eine select Anweisung ein Timeout zu implementieren, die den Test fehlschlagen, wenn die übergebene Funktion wurde nicht innerhalb eines vorgegebenen Zeitrahmens (playground) aufgerufen:

Verwandte Themen