2015-09-16 19 views
5

Tôi đã viết chức năng ngủ của riêng mình và muốn thử nghiệm chức năng này. Sau đây là mã của tôi:Cách kiểm tra chức năng ngủ ở golang

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

Điều này không hoạt động. Tôi đang cố gắng để có được thời gian bắt đầu và kết thúc thời gian và sau đó so sánh nó với thời gian dự kiến. Thời gian dự kiến ​​sẽ tính bằng giây. Tôi đã thử end.Sub(start) nhưng điều này trả lại cho tôi một cái gì đó như 1m30.0909, thay vào đó tôi cần 90 kết quả là. Sẽ rất tuyệt nếu ai đó có thể giúp tôi. Cảm ơn :)

+4

bạn cần có một chút thời gian để đọc các reference.there api là một loại 'Duration'. –

+0

Bạn có thể gây rối với thời lượng hoặc bạn có thể chỉ cần trừ giá trị int. time.Now() - time.Now() không trả về thời gian.Thời lượng thứ hai. – jabgibson

+0

Sẽ rất thú vị nếu biết chức năng ngủ của bạn vượt qua bài kiểm tra? – LenW

Trả lời

1

Nếu bạn sử dụng thời gian.Unix() cung cấp cho bạn số giây kể từ kỷ nguyên (ngày 1 tháng 1 năm 1970 UTC) thì thử nghiệm của bạn sẽ hoạt động.

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

Hiện tại, mã của bạn đang trừ đi một thời gian.Now() không trả lại kết quả bạn dự định. Thử nghiệm của bạn muốn các giá trị int đơn giản biểu thị giây.

10

Thời gian đã qua:

Cách dễ dàng nhất để có được thời gian trôi qua kể từ khi một thời gian cụ thể (start) là sử dụng time.Since() chức năng mà trả về một time.Duration trong đó có một phương pháp Duration.Seconds() mà trả về thời gian trong vài giây như float64 .

Vì vậy, trong trường hợp của bạn những giây trôi qua:

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

Bây giờ trên để thử nghiệm ...

Khi kiểm tra chức năng ngủ giống như bạn nên đi vào xem xét rằng sau khi ngủ nó không phải là đảm bảo rằng mã sẽ tiếp tục thực hiện ngay lập tức. Ví dụ trích dẫn từ doc của time.Sleep():

Ngủ tạm dừng goroutine hiện tại cho ít nhất thời gian d.

Vì vậy, khi viết mã kiểm tra cho các chức năng ngủ như thế nào, tôi sẽ thử nghiệm như thế này:

  • thời gian trôi qua nên có ít nhất các quy định,
  • và cho phép một số lề lỗi.

Vì vậy, ví dụ như kiểm tra nó như thế này:

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

Đây là câu trả lời hay nhất. Tôi không biết về chức năng Từ. – jabgibson

Các vấn đề liên quan