【问题标题】:Coro Test::MoreCoro测试::更多
【发布时间】:2013-04-23 23:15:07
【问题描述】:

我有一个正在工作的 Coro 程序,我正在为它编写测试脚本

这是我尝试测试的精简版

use Test::More ;#tests => 9;

BEGIN{
  use_ok( 'EV' ) || print "Bail out!\n";
  use_ok( 'Coro' ) || print "Bail out!\n";
  use_ok( 'AnyEvent' ) || print "Bail out!\n";
  use_ok( 'Coro::AnyEvent' ) || print "Bail out!\n";
}

my @coro;
push @coro, async sub{ok(Coro::AnyEvent::sleep(2), 'sleep')};

push @coro, async sub{ok (1 == 1, 'one equals one')};
push @coro, async sub{isnt (1, 2, 'one does not equal two')};
#push @coro, async sub{is(EV::unloop, undef, 'unloop')};

#EV::run;

map {ok($_->join, 'join')} @coro;

这给了我

t/coro-test.t .. 
ok 1 - use EV;
ok 2 - use Coro;
ok 3 - use AnyEvent;
ok 4 - use Coro::AnyEvent;
ok 5 - one equals one
ok 6 - one does not equal two
Undefined subroutine &main:: called at /usr/lib/perl5/Coro/AnyEvent.pm line 218.
Dubious, test returned 9 (wstat 2304, 0x900)
All 6 subtests passed 

Test Summary Report
-------------------
t/coro-test.t (Wstat: 2304 Tests: 6 Failed: 0)
  Non-zero exit status: 9
  Parse errors: No plan found in TAP output
 Files=1, Tests=6,  0 wallclock secs ( 0.02 usr  0.01 sys +  0.18 cusr  0.03 csys =  0.24 CPU)
Result: FAIL

我的(真实的)程序会关闭协程,然后它们会在无事可做的情况下睡觉,所以这不是一个人为的例子。

感谢您的任何帮助。 (我认为 unloop 和 EV::run 不是必需的)

【问题讨论】:

  • 我写的是use_ok( 'EV' ) || BAIL_OUT('use EV failed')";,而不是use_ok( 'EV' ) || print "Bail out!\n";。感谢|| 的提示,我正在寻找如何正确处理无法加载模块的问题。
  • 但实际上您甚至似乎都没有问题……这不是这里的想法。应该关闭问题,因为无法给出答案。
  • 问题是如何让 Test::More 与 Coro 合作,因为我喜欢 Test::More 和 Coro。

标签: perl coroutine test-more


【解决方案1】:

我无法想象 Test::More 不起作用的原因,事实上,它适用于当前版本的 Coro 和 AnyEvent(以及作为事件后端的 EV 或 Perl)。

我认为您的问题可能是 Coro::AnyEvent::sleep 返回了 Test::More 在您的系统上不喜欢的东西。假设 Coro::AnyEvent::sleep 返回任何特定的东西无论如何都是在寻找麻烦 - 返回值(如果有)是未记录的,因此期望它是特定的会使您的程序依赖于未记录的行为,并且失败是预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    相关资源
    最近更新 更多