นี่คือคำสั่ง poe-gen-testsp ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
poe-gen-tests - สร้างการทดสอบ POE มาตรฐานสำหรับโมดูลของบุคคลที่สาม
เรื่องย่อ
poe-gen-tests --dirbase t/ลูป \
--ลูปกิ๊บ\
--ลูป Kqueue \
--loop เหตุการณ์::Lib \
--loop POE::XS::Loop::แบบสำรวจ
DESCRIPTION
โปรแกรมนี้และโมดูล POE::Test::Loop::* ประกอบขึ้นเป็นการทดสอบของ POE สำหรับ
POE::คลาสย่อยลูป การทดสอบเหล่านี้ได้รับการออกแบบมาให้ทำงานเหมือนกันโดยไม่คำนึงถึง
วนรอบเหตุการณ์ปัจจุบัน POE ใช้พวกมันเพื่อทดสอบการวนซ้ำของเหตุการณ์ที่รวมกลุ่มไว้:
POE::วนซ้ำ::Gtk
POE::Loop::IO_Poll (--loop IO::โพล)
POE::วนซ้ำ::Tk
POE::Loop::กิจกรรม
POE::วนซ้ำ::เลือก
นักพัฒนาของโมดูล POE::Loop อื่นๆ ขอแนะนำให้ใช้แพ็คเกจนี้เพื่อสร้างมากกว่า 420
การทดสอบที่ครอบคลุมสำหรับงานของตนเอง
การใช้
poe-gen-tests สร้างไฟล์ทดสอบสำหรับลูปเหตุการณ์อย่างน้อยหนึ่งรายการภายใต้ไดเร็กทอรี
ระบุไว้ใน --dirbase ตัวอย่างเช่น,
poe-gen-tests --dirbase t/loop --loop เลือก
สร้างไฟล์ทดสอบต่อไปนี้:
t/ลูป/เลือก/all_errors.t
t/ลูป/เลือก/comp_tcp.t
t/ลูป/เลือก/comp_tcp_concurrent.t
t/ลูป/เลือก/connect_errors.t
t/ลูป/เลือก/k_alarms.t
t/ลูป/เลือก/k_aliases.t
t/ลูป/เลือก/k_detach.t
t/ลูป/เลือก/k_selects.t
t/ลูป/เลือก/k_sig_child.t
t/ลูป/เลือก/k_signals.t
t/ลูป/เลือก/k_signals_rerun.t
t/ลูป/เลือก/sbk_signal_init.t
t/ลูป/เลือก/ses_nfa.t
t/ลูป/เลือก/ses_session.t
t/loops/select/wheel_accept.t
t/loops/select/wheel_curses.t
t/loops/select/wheel_readline.t
t/loops/select/wheel_readwrite.t
t/loops/select/wheel_run.t
t/ลูป/เลือก/wheel_sf_ipv6.t
t/ลูป/เลือก/wheel_sf_tcp.t
t/loops/select/wheel_sf_udp.t
t/ลูป/เลือก/wheel_sf_unix.t
t/loops/select/wheel_tail.t
พารามิเตอร์ --loop อาจเป็นชื่อคลาส POE::Loop::... หรือคลาสลูปของเหตุการณ์ที่
จะทำให้ชื่อแพ็คเกจ POE::Loop::...
poe-gen-tests --dirbase t/loops --loop เหตุการณ์::Lib
การทดสอบ poe-gen --dirbase t/loop --loop POE::Loop::Event_Lib
poe-gen-tests ค้นหาส่วน "=for poe_tests" หรือ "=begin poe_tests" ภายใน
POE::Loop class กำลังทดสอบ หากกำหนดไว้ ส่วนนี้ควรมีฟังก์ชันเดียว
ข้าม_tests()ที่กำหนดว่าควรข้ามการทดสอบใดๆ หรือไม่
โปรดดูที่ perlpod สำหรับไวยากรณ์สำหรับ "=for" และ "=begin" ดู PODDITIES เพื่อความโดดเด่นด้วย
ความแตกต่างระหว่างการสนับสนุน POD ของ POE::Test::Loop และมาตรฐาน
ข้าม_tests() ถูกเรียกด้วยพารามิเตอร์เดียว ชื่อฐานของการทดสอบที่จะดำเนินการ
คืนค่าเท็จหากการทดสอบควรรันหรือข้อความที่จะแสดงต่อผู้ใช้
อธิบายว่าเหตุใดการทดสอบจึงถูกข้ามไป ข้อความนี้ส่งตรงไปยัง Test::More's
วางแผน() พร้อมกับ "skip_all" ตรรกะเป็นหลัก:
if (my $why = skip_tests("k_signals_rerun")) {
วางแผน skip_all => $ทำไม;
}
ข้าม_tests() ควรโหลดโมดูลใด ๆ ที่จำเป็นสำหรับการวนรอบเหตุการณ์ ดูตัวอย่างส่วนใหญ่
ด้านล่าง
ตัวอย่าง poe_tests คำแนะนำ
POE::Loop::Event ตรวจสอบว่ามีโมดูล Event อยู่หรือไม่และสามารถโหลดได้หรือไม่
การทดสอบเฉพาะสามารถทำงานภายใต้ระบบปฏิบัติการเฉพาะ
=สำหรับ poe_tests
ย่อย skip_tests {
ส่งคืน "การทดสอบเหตุการณ์ต้องใช้โมดูลเหตุการณ์" ถ้า (
ทำ { eval "ใช้เหตุการณ์"; $@ }
);
$test_name ของฉัน = กะ;
if ($test_name eq "k_signals_rerun" และ $^O eq "MSWin32") {
ส่งคืน "การทดสอบนี้ขัดข้อง Perl เมื่อรันด้วย Tk บน $^O";
}
if ($test_name eq "wheel_readline" และ $^O eq "darwin") {
ส่งคืน "เหตุการณ์ข้ามการทดสอบสองครั้งด้วยเหตุผลเดียวกัน";
}
}
POE::Loop::Gtk ตรวจสอบว่ามีการตั้งค่า DISPLAY หรือไม่ ซึ่งแสดงว่า X กำลังทำงานอยู่ มันแล้ว
ตรวจสอบว่า Gtk พร้อมใช้งาน โหลดได้ และเริ่มต้นได้อย่างปลอดภัยก่อนที่จะข้าม
การทดสอบเฉพาะ
=สำหรับ poe_tests
ย่อย skip_tests {
$test_name ของฉัน = กะ;
ส่งคืน "Gtk ต้องการ DISPLAY (ตั้งค่าวันนี้ได้ไหม)" เว้นแต่ (
กำหนด $ENV{DISPLAY} และความยาว $ENV{DISPLAY}
);
ส่งคืน "การทดสอบ Gtk ต้องใช้โมดูล Gtk" หากทำ { eval "use Gtk"; $@ };
ส่งคืน "Gtk init ล้มเหลว DISPLAY ถูกต้องหรือไม่" เว้นแต่กำหนดไว้ Gtk->init_check;
ถ้า ($test_name eq "z_rt39872_sigchld_stop") {
ส่งคืน "Gdk ขัดข้อง";
}
กลับ;
}
POE::Loop::IO_Poll ตรวจสอบความเข้ากันได้ของระบบก่อนที่จะตรวจสอบว่า IO::Poll เป็น
พร้อมใช้งานและโหลดได้
=สำหรับ poe_tests
ย่อย skip_tests {
ส่งคืน "IO::Poll ไม่เข้ากันได้กับ $^O" 100% ถ้า $^O eq "MSWin32";
ส่งคืน "IO::การทดสอบโพลต้องใช้โมดูล IO::Poll" ถ้า (
ทำ { eval "ใช้ IO::Poll"; $@ }
);
}
POE::Loop::Select ไม่มีข้อกำหนดเฉพาะ
=สำหรับ poe_tests
ย่อย skip_tests { กลับ }
POE::Loop::Tk ต้องการจอแสดงผล X (ยกเว้นใน Windows) Tk ไม่ปลอดภัยสำหรับ ส้อม()ดังนั้นข้าม
การทดสอบที่ต้องใช้ส้อม และสุดท้าย ตรวจสอบว่ามีโมดูล Tk หรือไม่
โหลดได้และรันได้
=สำหรับ poe_tests
ย่อย skip_tests {
ส่งคืน "Tk ต้องการ DISPLAY (ตั้งค่าวันนี้ได้ไหม)" เว้นแต่ (
(กำหนด $ENV{DISPLAY} และความยาว $ENV{DISPLAY}) หรือ $^O eq "MSWin32"
);
$test_name ของฉัน = กะ;
if ($test_name eq "k_signals_rerun" และ $^O eq "MSWin32") {
ส่งคืน "การทดสอบนี้ขัดข้อง Perl เมื่อรันด้วย Tk บน $^O";
}
ส่งคืน "การทดสอบ Tk ต้องการโมดูล Tk" หากทำ { eval "use Tk"; $@ };
my $m = eval { Tk::MainWindow->new() };
ถ้า ($@) {
ทำไม $ ทำไม = $@;
$wh =~ s/ ที่ .*//;
return "Tk ไม่สามารถเริ่มต้นได้: $ทำไม";
}
กลับ;
}
ติดตั้ง สคริปต์ บูรณาการ
การทดสอบ POE::Loop เริ่มต้นขึ้นโดยเป็นส่วนหนึ่งของการกระจาย POE คำแนะนำทั้งหมด
และตัวอย่างที่ตามมาจะถูกเขียนและทดสอบกับ ExtUtils::Maker เพราะนั่นคือ
สิ่งที่ POE ใช้ โปรดปรับสูตรเหล่านี้ตามรสนิยมและความชอบของคุณ
การเรียกร้อง เอกสาร เครื่องกำเนิดไฟฟ้า
ต้องสร้างการทดสอบก่อนที่ผู้ใช้หรือเชลล์ CPAN จะเรียกใช้ "ทำการทดสอบ" เป็นระเบียบ
วิธีการทำเช่นนี้อาจเป็นการสร้างเป้าหมาย Makefile ใหม่และรวมสิ่งนั้นเป็นการพึ่งพา
สำหรับ "ทำแบบทดสอบ" POE ใช้แนวทางที่ง่ายกว่า โดยเรียกสคริปต์จาก Makefile.PL:
ระบบ(
$^X, "poe-gen-tests", "--dirbase", "t/30_loops",
"--ลูป", "เหตุการณ์", "--ลูป", "Gtk", "--ลูป", "IO::โพล",
"--ลูป", "เลือก", "--ลูป", "ทีเค",
) และตาย $!;
วิธีก่อนหน้านี้สร้างการทดสอบ ณ เวลาติดตั้ง ดังนั้นจึงไม่จำเป็นต้องรวม
ไฟล์ที่สร้างขึ้นใน MANIFEST ไดเรกทอรีทดสอบควรแยกออกจาก
ประจักษ์ poe-gen-tests จะสร้างเส้นทางที่จำเป็น
นอกจากนี้ยังสามารถสร้างการทดสอบก่อนที่จะ "ทำ dist" การกระจายของ
MANIFEST จะต้องรวมไฟล์ที่สร้างขึ้นในกรณีนี้
คนส่วนใหญ่ไม่จำเป็นต้องเพิ่มการทดสอบที่สร้างขึ้นไปยังที่เก็บของพวกเขา
เล่น การทดสอบ
ตามค่าเริ่มต้น ExtUtils::MakeMaker จะสร้าง Makefiles ที่เรียกใช้การทดสอบที่ตรงกับ t/*.t เท่านั้น
อย่างไรก็ตาม ผู้เขียนสามารถระบุสถานที่ทดสอบอื่นๆ ได้ เพิ่มพารามิเตอร์ต่อไปนี้
ไปยัง เขียนMakefile() เพื่อให้การทดสอบที่สร้างขึ้นข้างต้นจะดำเนินการ:
การทดสอบ => {
การทดสอบ => "t/*.tt/30_loops/*/*.t",
}
การทำความสะอาด UP
Makefiles จะไม่ล้างไฟล์ที่ไม่มีอยู่ใน MANIFEST ซึ่งรวมถึง
การทดสอบที่สร้างขึ้นในเวลาติดตั้ง หากสิ่งนี้รบกวนคุณ คุณจะต้องเพิ่มคำสั่งใน
รวมการทดสอบที่สร้างขึ้นในเป้าหมาย "สะอาด" และ "distclean"
สะอาด => {
FILES => "t/30_loops/*/* t/30_loops/*",
}
นี่ถือว่าไดเร็กทอรี "t/30_loops" มีเฉพาะการทดสอบที่สร้างขึ้นเท่านั้น ขอแนะนำ
ที่สร้างและการทดสอบด้วยรหัสมือไม่ได้อยู่ร่วมกันในไดเร็กทอรีเดียวกัน
ดูเหมือนความคิดที่ดีที่จะลบไดเร็กทอรีและไฟล์ที่ลึกกว่าก่อนผู้ปกครอง
การกระโดดข้าม เครือข่าย การทดสอบ
การทดสอบที่สร้างขึ้นบางรายการจำเป็นต้องมีเครือข่ายและสามารถเข้าถึงได้ การทดสอบเหล่านั้นจะเป็น
ข้ามไปเว้นแต่ไฟล์ "run_network_tests" จะปรากฏในไดเร็กทอรีการแจกจ่ายหลัก
คุณสามารถรวมไฟล์นั้นใน tarball ของการแจกจ่ายของคุณ แต่ควรสร้างที่
ติดตั้งเวลาหลังจากถามผู้ใช้ นี่คือวิธีที่ POE ทำ คุณมีอิสระที่จะทำ
มันเป็นอย่างอื่น
# เปลี่ยนเป็นพฤติกรรมเริ่มต้นหาก STDIN ไม่ใช่ tty
เว้นแต่ (-t STDIN) {
เตือน(
"\NS",
"============================================\n\n ",
"STDIN ไม่ใช่เทอร์มินัล สมมติว่า --default.\n\n",
"============================================\n\n ",
);
กด @ARGV, "--default";
}
# เตือนผู้ใช้ที่เธอสามารถใช้ได้ --default
เว้นแต่ (grep /^--default$/, @ARGV) {
เตือน(
"\NS",
"==============================================\ n\n",
"พรอมต์อาจถูกข้ามด้วย --default แฟล็ก\n\n",
"==============================================\ n\n",
);
}
# เราควรรันการทดสอบเครือข่ายหรือไม่?
$prompt ของฉัน = (
"การทดสอบของ POE บางรายการจำเป็นต้องมีเครือข่ายที่ใช้งานได้\n"
"คุณสามารถข้ามการทดสอบเหล่านี้ได้หากต้องการ\n\n"
"คุณต้องการข้ามการทดสอบเครือข่ายหรือไม่"
);
$ret ของฉัน = "n";
ถ้า (grep /^--default$/, @ARGV) {
พิมพ์ $prompt, " [$ret] $ret\n\n";
}
else {
$ret = พรอมต์($พรอมต์, "n");
}
my $marker = 'run_network_tests';
ยกเลิกการเชื่อมโยง $marker;
เว้นแต่ ($ret =~ /^Y$/i) {
open(TOUCH,"+>$marker") และปิด TOUCH;
}
พิมพ์ "\n";
การกระโดดข้าม อื่นๆ การทดสอบ
การทดสอบลูปของ POE จะเปิดหรือปิดการทดสอบตามความสามารถของลูปเหตุการณ์
การแจกแจงและลูปของเหตุการณ์อาจตั้งค่าตัวแปรเหล่านี้เพื่อส่งสัญญาณว่าการทดสอบใดที่ทำได้
การทำงาน
POE_LOOP_USES_POLL
บางแพลตฟอร์มไม่รองรับ แบบสำรวจความคิดเห็น () ในการจัดการไฟล์บางประเภท เหตุการณ์วนซ้ำที่
ใช้ แบบสำรวจความคิดเห็น () ควรตั้งค่าตัวแปรสภาพแวดล้อมนี้เป็นค่าจริง มันจะทำให้เกิดการทดสอบ
เพื่อข้ามการรวมกันที่ลำบากนี้
พ็อดดิตส์
เวอร์ชันก่อนหน้าของ POE::Test::Loops จัดทำเอกสารส่วน "=for poe_tests" ที่ยุติโดย
=ตัดและมีบรรทัดว่าง นี่เป็นไวยากรณ์ POD ที่ไม่ถูกต้อง และเป็นสาเหตุที่
ข้าม_tests() ฟังก์ชันต่างๆ ปรากฏใน perldoc และใน search.cpan.org ไวยากรณ์ต่อไปนี้
ผิดและไม่ควรใช้ ฉันขอโทษ.
=สำหรับ poe_tests
ย่อย skip_tests { ... }
=ตัด
ไวยากรณ์ที่ถูกต้องคือการยุติ "=for poe_tests" ด้วยบรรทัดว่าง:
=สำหรับ poe_tests
ย่อย skip_tests {
...
}
การทดสอบหลายบรรทัดที่มีบรรทัดว่างสามารถระบุได้โดยใช้ "=begin poe_tests" ของ POD
สิ้นสุดโดย "=end poe_tests"
=เริ่ม poe_tests
ย่อย skip_tests {
...
}
=สิ้นสุด poe_tests
รองรับทั้งสามรูปแบบข้างต้นตั้งแต่ POE::Test::Loops เวอร์ชัน 1.034 NS
ไม่ถูกต้อง =for ไวยากรณ์เลิกใช้แล้วและจะถูกลบออกในรุ่นต่อ ๆ ไป
ใช้ poe-gen-testsp ออนไลน์โดยใช้บริการ onworks.net