2017-04-13 55 views
0

我是單元測試使用當前時間的函數。正因爲如此,我正在尋找一種僞造系統時間的方法。我知道有些庫改變了系統時間,但是我正在尋找一些小型單元測試的創新性較弱的簡單選擇。虛擬Linux系統時間在一個單元測試

是否類似這樣的東西存在?:

TEST_T(MyUnitTest, example_test){ 

    startFakeSystemDate("2017-3-13T18:12:49Z"); 

    //perform time based unit test 

    endFakeSystemDate(); 
} 
+3

難道這不是寫一個獲取系統時間的函數,然後在你的測試中模擬該函數? – TankorSmash

+0

如何在我的測試中模擬get系統時間函數? – greenleaftreee

+0

有[warp](https://github.com/att/ast/blob/master/src/cmd/warp/PROMO.mm)軟件。這是一個C文件,它用另一個'time'和'gettimeofday'(及其他)生成一個共享對象,以及一個使用LD_PRELOAD來運行帶有該共享對象的可執行文件的shell腳本。 –

回答

0

這裏有一個辦法做到這一點使用當前的時間和指定時間之間的差。

#include <iostream> 
#include <ctime> 

void FakeTime(tm *f_time, int year, int month, int day, int hour = 0, int min = 0, int sec = 0) { 
    f_time->tm_year = year; 
    f_time->tm_mon = month; 
    f_time->tm_mday = day; 
    f_time->tm_hour = hour; 
    f_time->tm_min = min; 
    f_time->tm_sec = sec; 
} 

int main() { 
    time_t sys_time; 
    struct tm f_time = {0}, stime; 
    FakeTime(&f_time,2017,1,31); 
    time(&sys_time); 
    stime = *gmtime(&sys_time); 
    stime.tm_year += 1900; 
    stime.tm_mon += 1; 
    double seconds = difftime(mktime(&stime),mktime(&f_time)); 
} 

將秒添加到當前時間以獲得新的「假時間」。