Coro Test:: Больше
У меня есть рабочая программа 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 не требуются)
1 ответ
Я не могу представить причину, по которой Test::More не будет работать, и на самом деле это работает для меня с текущими версиями Coro и AnyEvent (и EV, или Perl в качестве бэкэндов событий).
Я думаю, что ваша проблема может заключаться в том, что Coro::AnyEvent::sleep возвращает то, что Test::More не нравится в вашей системе. Предполагая, что Coro::AnyEvent::sleep возвращает что-то конкретное, ищет проблему в любом случае - возвращаемые значения, если таковые имеются, недокументированы, поэтому ожидание того, что это будет что-то конкретное, заставляет вашу программу полагаться на недокументированное поведение, и сбой является ожидаемым исход.