Làm thế nào để vượt qua luận cứ để Perl kiểm tra khi chạy qua prove

Khi viết bài kiểm tra trong Perl hệ sinh thái, đôi khi bạn cần để viết một bài kiểm tra mà bạn có thể vượt qua một số lập luận. Ví dụ, anh có thể kiểm tra, không có tranh cãi kiểm tra tất cả các tập tin và nếu nó như lập luận để xác định đường đi cho các tập tin rồi nó sẽ kiểm tra chỉ là một tập tin này.

Tức là, vấn đề là ở Perl kiểm tra biến @ARGV xuất hiện giá trị.

Đây là một ví dụ kiểm tra t/main.t:

use Test::More tests => 1;
use Data::Dumper;

pass('Loaded ok');

warn Dumper \@ARGV;

Nếu bạn chạy thử nghiệm này sử dụng perl t/main.t one two three, sau đó kết luận sẽ được nhìn thấy điều đó trong biến @ARGV có giá trị từ dòng lệnh:

1..1
ok 1 - Loaded ok
$VAR1 = [
          'one',
          'two',
          'three'
        ];

Nhưng nếu bạn chạy một thử nghiệm sử dụng prove t/main.t one two three, sau đó ra sẽ được nhìn thấy trong một mảng @ARGV giá trị từ dòng lệnh không đánh và đánh giá bởi SecTreas, prove cảm nhận những lập luận như lập luận để thử nghiệm, và như lập luận với chính mình.

Đây là một sản phẩm của công việc:

$VAR1 = [];
t/main.t .. ok
Cannot detect source of 'one'! at /usr/local/lib/perl5/5.28.1/TAP/Parser/IteratorFactory.pm line 256.
    TAP::Parser::IteratorFactory::detect_source(TAP::Parser::IteratorFactory=HASH(0x55663d4f4300), TAP::Parser::Source=HASH(0x55663d61cdc0)) called at /usr/local/lib/perl5/5.28.1/TAP/Parser/IteratorFactory.pm line 211
    TAP::Parser::IteratorFactory::make_iterator(TAP::Parser::IteratorFactory=HASH(0x55663d4f4300), TAP::Parser::Source=HASH(0x55663d61cdc0)) called at /usr/local/lib/perl5/5.28.1/TAP/Parser.pm line 472
    TAP::Parser::_initialize(TAP::Parser=HASH(0x55663d6a11d8), HASH(0x55663d4f4390)) called at /usr/local/lib/perl5/5.28.1/TAP/Object.pm line 55
    TAP::Object::new("TAP::Parser", HASH(0x55663d4f4390)) called at /usr/local/lib/perl5/5.28.1/TAP/Object.pm line 130
    TAP::Object::_construct(TAP::Harness=HASH(0x55663ce11a90), "TAP::Parser", HASH(0x55663d4f4390)) called at /usr/local/lib/perl5/5.28.1/TAP/Harness.pm line 852
    TAP::Harness::make_parser(TAP::Harness=HASH(0x55663ce11a90), TAP::Parser::Scheduler::Job=HASH(0x55663d33bf80)) called at /usr/local/lib/perl5/5.28.1/TAP/Harness.pm line 651
    TAP::Harness::_aggregate_single(TAP::Harness=HASH(0x55663ce11a90), TAP::Parser::Aggregator=HASH(0x55663ce11880), TAP::Parser::Scheduler=HASH(0x55663d33be78)) called at /usr/local/lib/perl5/5.28.1/TAP/Harness.pm line 743
    TAP::Harness::aggregate_tests(TAP::Harness=HASH(0x55663ce11a90), TAP::Parser::Aggregator=HASH(0x55663ce11880), "t/main.t", "one", "two", "three") called at /usr/local/lib/perl5/5.28.1/TAP/Harness.pm line 558
    TAP::Harness::__ANON__() called at /usr/local/lib/perl5/5.28.1/TAP/Harness.pm line 571
    TAP::Harness::runtests(TAP::Harness=HASH(0x55663ce11a90), "t/main.t", "one", "two", "three") called at /usr/local/lib/perl5/5.28.1/App/Prove.pm line 548
    App::Prove::_runtests(App::Prove=HASH(0x55663ce093a8), HASH(0x55663d22f6c8), "t/main.t", "one", "two", "three") called at /usr/local/lib/perl5/5.28.1/App/Prove.pm line 506
    App::Prove::run(App::Prove=HASH(0x55663ce093a8)) called at /usr/local/bin/prove line 13

Các giải pháp để sử dụng ::

Đội prove là một bộ những gì được viết sau khi đôi tràng biểu tượng :: prove đi để chạy các bài kiểm tra.

Vì vậy, nếu bạn chạy các bài kiểm tra với prove t/main.t :: one two three, chúng tôi nhận được kết quả:

$VAR1 = [
          'one',
          'two',
          'three'
        ];
t/main.t .. ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.04 usr  0.01 sys +  0.09 cusr  0.02 csys =  0.16 CPU)
Result: PASS

Tài liệu chính thức

Đây là một đoạn trong đầu ra perldoc prove về tính năng này prove:

  Arguments to Tests
    It is possible to supply arguments to tests. To do so separate them from
    prove's own arguments with the arisdottle, '::'. For example

     prove -v t/mytest.t :: --url http://example.com

    would run t/mytest.t with the options '--url http://example.com'. When
    running multiple tests they will each receive the same arguments.

Các bài viết khác