代码之家  ›  专栏  ›  技术社区  ›  Robert

为什么我的全局变量没有在Test::Class中初始化?

  •  0
  • Robert  · 技术社区  · 4 年前

    下面是一个使用一些全局变量/常量的简单测试用例:

    use strict;
    use warnings;
    use base 'Test::Class';
    use Test::More;
    
    __PACKAGE__->runtests() unless caller;
    
    my $ONE = "1";
    my $TWO;
    
    sub setup : Test(setup) {
        $TWO = "2";
    }
    
    sub test_me : Tests {
        is("1", $ONE);
        is("2", $TWO);
    }
    

    $ONE 未初始化:

    robert@saaz:~$ prove test.t 
    test.t .. 1/? 
    #   Failed test 'test me'
    #   at test.t line 16.
    #   (in main->test_me)
    #          got: '1'
    #     expected: undef
    # Looks like you failed 1 test of 2.
    test.t .. Dubious, test returned 1 (wstat 256, 0x100)
    Failed 1/2 subtests 
    
    Test Summary Report
    -------------------
    test.t (Wstat: 256 Tests: 2 Failed: 1)
      Failed test:  1
      Non-zero exit status: 1
    Files=1, Tests=2,  0 wallclock secs ( 0.02 usr  0.00 sys +  0.05 cusr  0.00 csys =  0.07 CPU)
    Result: FAIL
    

    为什么?很明显,这个变量是被定义的(否则我会因为 use strict;

    Test::Class 测验?

    1 回复  |  直到 4 年前
        1
  •  2
  •   ikegami Gilles Quénot    4 年前

    你的任务确实会被执行,但只有在你完成测试之后。这是因为您运行测试(调用 __PACKAGE__->runtests() )在作业之前。

    此外,官方不允许在执行变量之前使用它 my . 你的安排是唯一被文档称为未定义行为的东西(这意味着它可以导致任何行为)。