2015-09-16 39 views
5

我已經編寫了我自己的睡眠功能並且想測試它。以下是我的代碼:如何在golang中測試睡眠功能

func TestSleep(t *testing.T) { 
    start := time.Now() 
    mySleepFunction(65) 
    end := time.Now() 
    if (end - start) != 65 { 
     t.Error("Incorrect sleep function") 
    } 
} 

這不起作用。我正在嘗試獲取開始時間和結束時間,然後將其與預期時間進行比較。預計的時間將以秒爲單位。我試過end.Sub(start),但是這個返回給我的是類似於1m30.0909,而我需要90作爲結果。如果有人能幫助我,那將會很棒。 謝謝:)

+4

你需要有一定的時間來閱讀API reference.there是一種'Duration'。 –

+0

你可以混淆持續時間,或者你可以簡單地減去int值。 time.Now() - time.Now()不返回時間。第二個持續時間。 – jabgibson

+0

知道您的睡眠功能是否通過測試會很有趣? – LenW

回答

1

如果你使用time.Unix(),它給你自紀元(1970年1月1日UTC)以來的秒數,那麼你的測試應該工作。

func TestSleep(t *testing.T) { 
    start := time.Now().Unix() 
    mySleepFunction(65) 
    end := time.Now().Unix() 
    if (end - start) != 65{ 
     t.Error("Incorrect sleep function") 
    } 
} 

目前,你的代碼是減去time.Now(),它不會返回你打算的結果。你的測試需要簡單的代表秒的int值。

10

經過時間:

最容易得到的經過時間以來的特定時間(start)是使用time.Since()函數返回一個time.Duration具有Duration.Seconds()方法,它返回的持續時間,以秒爲float64

所以你的情況經過秒:

sec := time.Since(start).Seconds() 

現在到測試...

當測試睡眠相似的功能,你應該考慮到睡眠後不保證代碼將繼續立即執行。例如從time.Sleep()該文檔引用:

睡眠暫停至少持續時間d的當前夠程。

因此對於睡眠相似的功能編寫測試代碼的時候,我會測試這樣的:

  • 經過的時間應該至少指定,
  • ,並允許一些誤差。

因此,例如,測試它是這樣的:

func TestSleep(t *testing.T) { 
    const secSleep = 65.0 

    start := time.Now() 
    mySleepFunction(int(secSleep)) 
    sec := time.Since(start).Seconds() 

    if sec < secSleep || sec > secSleep*1.05 { 
     t.Error("Incorrect sleep function") 
    } 
} 
+0

這是最好的答案。我不知道Since函數。 – jabgibson