Możesz napisać swój własny moduł
z blackjackiem i prostytutkami
, aby udawać, że gettimeofday. Według niektórych modyfikacjach testów :: MockTime napisałem:
#!/usr/bin/perl
package myMockTime;
use strict;
use warnings;
use Exporter qw(import);
use Time::HiRes();
use Carp;
our @fixed =();
our $accel = 1;
our $otime = Time::HiRes::gettimeofday;
our @EXPORT_OK = qw(
set_fixed_time_of_day
gettimeofday
restore
throttle
);
sub gettimeofday() {
if (@fixed) {
return wantarray ? @fixed : "$fixed[0].$fixed[1]";
}
else {
return $otime + ((Time::HiRes::gettimeofday - $otime) * $accel);
}
}
sub set_fixed_time_of_day {
my ($time1, $time2) = @_;
if (! defined $time1 || ! defined $time2) {
croak('Incorrect usage');
}
@fixed = ($time1, $time2);
}
sub throttle {
my $self = shift @_;
return $accel unless @_;
my $new = shift @_;
$new or croak('Can not set throttle to zero');
$accel = $new;
}
sub restore {
@fixed =();
}
1;
myślę, że ma dużo błędów i niekompletności funkcjonalność, prace w tym kierunku
Chcesz coś takiego jak 'set_fixed_time_of_day' sub? – Suic
Myślałem o tym, czego chcę. Chcę móc zatrzymać czas w moim skrypcie testowym. Po uruchomieniu 'my $ ts = CORE :: time(); set_fixed_time ($ ts); '(lub coś w tym stylu)' time() 'i' Time :: HiRes :: gettimeofday() 'zwróci te same wartości, aż ja jawnie uruchomię' $ ts ++; set_fixed_time ($ ts); ' – bessarabov