Perl Test :: MockTime + Time :: localtime

时间:2012-12-25 08:09:13

标签: perl time

我正在尝试用Test :: MockTime模块替换当前时间。它工作正常:

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;

但是,当我使用Time :: 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” 当使用Time :: localtime时,如何在测试中更改时间? 谢谢,抱歉我的英文

UPD:

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

没有工作

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

工作正常)perl magic

1 个答案:

答案 0 :(得分:1)

Test :: MockTime会覆盖localtime,但Time::localtime会使用CORE::localtimelocaltime的未覆盖版本)。你必须重写Time :: localtime的localtime