在测试之间共享perl模块状态

时间:2014-06-01 23:53:11

标签: perl module global state

我正在使用Test :: More,我有一个需要一段时间才能运行的辅助函数。我需要在几个测试脚本中使用它。我想保存运行此函数的结果,以便所有脚本都可以访问状态。调用函数的结果不会因每次测试而改变。

我创建了一个这样的模块:     包助手;

our $_global_state = under;

sub helper {
    if ( !defined( $_global_state)) {
        #insert magic here to set the _global_state
        print STDERR "Inside magic\n";
    }
    return $_global_state;
}

return 1;

但是,如果我从多个测试脚本中调用此函数,它会重做“魔法”。每一次。如果可能的话,我试图避免这种情况。

1 个答案:

答案 0 :(得分:3)

可以使用以下方法解决:

  • 将计算出的状态保存到文件中。
  • 如果文件未在10分钟内被修改,请重新计算该值。

使用Storable

use strict;
use warnings;

use Storable;

our $state_file = 'global.state';

sub helper {
    # Check to see if file last modified in 10 minutes.
    if (-e $state_file && -M $state_file < 1/24/6) {
        return retrieve($state_file);
    }

    #insert magic here to set the _global_state
    my $global_state = {'a'..'d'};

    store $global_state, $state_file;

    return $global_state;
}

use Data::Dump;
dd helper();

1;