2015-09-16 2 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

вам нужно некоторое время, чтобы прочитать апи reference.there тип 'Duration'. –

+0

Вы можете испортить длительность, или вы можете просто вычесть значения int. time.Now() - time.Now() не возвращает time.Second duration. – jabgibson

+0

Было бы интересно узнать, проходит ли ваша функция сна через тест? – LenW

ответ

1

Если вы используете time.Unix(), который дает вам количество секунд с эпохи (1 января 1970 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():

сна приостанавливает текущую goroutine для по крайней мере, продолжительности д.

Так при написании тестового кода для сна, как функции, я бы проверить, как это:

  • истекшее время должно быть по крайней мере, указанный,
  • и позволяют некоторый запас ошибки.

Так, например, проверить это следующим образом:

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

Это лучший ответ. Я не знал о функции «С». – jabgibson

Смежные вопросы