2017-01-15 77 views
0

所以我是新來的一般測試和我被困在試圖寫一個測試觸發其他功能的功能。這是我有這麼遠,但它是一種倒退,並阻止永遠如果功能不運行:測試以檢查函數是否未運行?

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將觸發trigger()功能,當滿足一定的條件。它測試每個1秒是否滿足標準。

錯誤情況是,當功能無法運行。有沒有一種方法來測試這種或有使用測試軟件來測試成功(例如t.Pass())的方法嗎?

回答

2

如果c.Start是同步的,你可以簡單地傳遞設置在測試用例的範圍值的函數,然後測試針對該值。 Condider在下面的例子中,functionCalled變量由trigger功能(playground)設置:

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") 
    } 
} 

如果c.Start是異步的,你可以使用一個select語句來實現超時,將未通過測試時所傳遞的功能在給定時間範圍內未被呼叫(playground):

func TestFd(t *testing.T) { 
    functionCalled := make(chan bool) 
    timeoutSeconds := 1 * time.Second 
    trigger := func(i int) { 
     functionCalled <- true 
    } 

    timeout := time.After(timeoutSeconds) 

    c := &SomeStruct{} 
    c.Start(trigger) 

    select { 
     case <- functionCalled: 
      t.Logf("function was called") 
     case <- timeout: 
      t.Fatalf("function was not called within timeout") 
    } 
} 
相關問題