2012-12-25 43 views
1

我想用Test :: MockTime模塊替換當前時間。它工作正常:Perl測試::模擬時間​​+時間::本地時間

use Test::MockTime qw(:all); 
use Time::Local; 
my $sec = 0; 
my $min = 0; 
my $hour = 14; 
my $mday = 1; #1-31 
my $mon = 1; #1-12 
my $year = 2013; #1970-... 
set_fixed_time(timelocal($sec,$min,$hour,$mday,$mon-1,$year-1900)); 
print join "\n", localtime; 

但是,當我使用時間::本地時間,什麼都不會發生:

use Time::localtime; 
use Time::Local; 
use Test::MockTime qw(:all); 

my ($sec,$min,$hour,$mday,$mon,$year)=(0,0,14,1,1,2013); 

set_fixed_time(timelocal($sec,$min,$hour,$mday,$mon-1,$year-1900)); 

my $t=localtime(); 
my $xmon=$t->mon; 
my $xyear=$t->year; 
my $xday=$t->mday; 
my $xmon_now=$xmon+1; 
my $xyear_now=$xyear+1900; 

print "$xmon_now $xyear_now\n"; 

輸出將是「12 2012」 如何更改時間在我的測試中,當時間::本地時間使用? 謝謝,對不起我的英語

UPD:

use Time::localtime; 
use Test::MockTime qw(:all); 

沒有工作

use Test::MockTime qw(:all); 
use Time::localtime; 

正常工作)perl的魔術

+0

(你應該讓你的更新成爲答案,並接受它!) – ikegami

+0

不能接受它。不明白爲什麼它的作品 – Suic

回答

1

測試:: MockTime覆蓋localtime,但Time::localtime使用CORE::localtime(未替代版本localtime)。你必須重寫Time :: localtime的localtime