2013-07-31 5 views
5

एक महान पर्ल मॉड्यूल Time::HiRes है। मैं इसे अपनी लाइब्रेरी में भारी रूप से उपयोग करता हूं और कुछ परीक्षण लिखना चाहता हूं। मैं 2 CPAN मॉड्यूल का मजाक उड़ाता है कि पर्ल time() समारोह पाया है, लेकिन उन दोनों Time::HiRes का समर्थन नहीं करते:पर्ल मॉड्यूल का नकल कैसे करें समय :: HiRes

मैं कैसे नकली कर सकते हैं Time::HiRes उप gettimeofday()?

पीएस मैं अपने मॉड्यूल Time::ETA के लिए परीक्षण ठीक करना चाहता हूं। अब मैं sleep "नकली", sometimes it works and sometimes it does not के साथ बदसूरत हैक का उपयोग करता हूं।

+0

कि तुम 'set_fixed_time_of_day' उप तरह कुछ चाहते हैं, उसमें कीड़े का एक बहुत और अधूरा functionallity, काम है? – Suic

+0

मैं जो चाहता हूं उसके बारे में सोच रहा था। मैं अपनी टेस्ट स्क्रिप्ट में समय रोकने में सक्षम होना चाहता हूं। मैं अपने $ ts = कोर :: समय() चलाने के बाद; set_fixed_time ($ ts); '(या ऐसा कुछ) 'समय()' और 'समय :: HiRes :: gettimeofday()' वही मान वापस करेगा जब तक कि मैं स्पष्ट रूप से' ts ++ चलाता हूं; set_fixed_time ($ ts); ' – bessarabov

उत्तर

2

आप अपना खुद का मॉड्यूल ब्लैकजैक और हुकर्स के साथ gettimeofday mock करने के लिए लिख सकते हैं। टेस्ट :: MockTime के कुछ संशोधनों के द्वारा मैं ने लिखा है:

#!/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; 

मुझे लगता है कि इस दिशा

+0

Yep =) यह एक समाधान है। लेकिन मुझे आशा थी कि यह समस्या पहले ही हल हो चुकी है। और मुझे लगता है कि एक नया मॉड्यूल नहीं लिखना बेहतर है, लेकिन टाइम :: मॉक या टेस्ट :: मॉकटाइम पैच करने का प्रयास करें। – bessarabov

+0

'निर्यातक का उपयोग करें; * आयात = \ और निर्यातक :: आयात; आयात() यदि 0; 'लिखा जा सकता है' निर्यातक qw (आयात) का उपयोग करें; ' – ikegami

+0

धन्यवाद, यह मूल टेस्ट :: नकली अक्षमता से हैकटाइम + हैक से कॉपी-पेस्ट था) – Suic

संबंधित मुद्दे