【问题标题】:Perl Test::MockTime + Time::localtimePerl 测试::模拟时间​​ + 时间::本地时间
【发布时间】:2023-04-04 06:45:02
【问题描述】:

我正在尝试用 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 时,如何更改测试中的时间? 感谢和抱歉我的英语

更新:

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

没用

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

工作正常)perl 魔法

【问题讨论】:

  • (你应该让你的更新成为一个答案,并接受它!)
  • 不能接受。不明白它为什么起作用

标签: perl time


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多