การทดสอบโมดูลใน PHP พื้นฐานของการทดสอบหน่วยใน PHP โดยใช้ PHPUnit การทดสอบหน่วย php

เนื่องจากการทิ้งข้อยกเว้นในโค้ดของแอปพลิเคชันเป็นเรื่องปกติ เรามาดูวิธีทดสอบโดยใช้ PHPUnit กัน
ในบทความเก่าๆ ในหัวข้อนี้ คุณสามารถค้นหาการใช้วิธีนี้ได้ setExpectedException()แต่โปรดจำไว้ว่า phpUnit เวอร์ชันใหม่กว่าจะใช้วิธีการนี้ คาดหวังข้อยกเว้น()เพื่อระบุประเภทของข้อยกเว้นที่คาดหวัง

เมธอดexpectException() เช่นเดียวกับคำสั่ง @expectedExceptionใช้ในการทดสอบเพื่อระบุว่า "คาดหวังเช่นนั้นและข้อยกเว้นดังกล่าว" การทดสอบจะถือว่าผ่านหากมีข้อยกเว้นประเภทที่ระบุเกิดขึ้น

ตัวอย่าง.
มีข้อยกเว้นเกิดขึ้นหากพารามิเตอร์ที่ส่งผ่านมีอักขระน้อยกว่า 4 ตัว:
ผู้ใช้คลาส ( ฟังก์ชั่นสาธารณะ ตรวจสอบรหัสผ่าน(อาร์เรย์ $user)( if(strlen($user["password"])<4){ throw new LengthException("Количество символов в пароле (" .$user["password"]. ") не соответствует требованиям."); } // } }
การทดสอบ:
คลาส UserTest ขยาย TestCase ( ฟังก์ชั่นสาธารณะ testVerifyPassword() ( $obj = new User(); $user["password"] = "123"; $this->expectException(LengthException::class); $obj->verifyPassword($ ผู้ใช้);
รหัสนี้สามารถเขียนใหม่ได้ดังนี้:
คลาส UserTest ขยาย TestCase ( /** * @expectedException LengthException */ ฟังก์ชั่นสาธารณะ testVerifyPassword() ( $obj = ผู้ใช้ใหม่(); $user["password"] = "123"; $obj->verifyPassword($user); ) ) เช่น. ใช้คำสั่ง @expectedException ระบุข้อยกเว้นที่ต้องการ

สำคัญ!เมื่อ PHPUnit พบข้อยกเว้นที่คาดไว้ วิธีทดสอบนี้จะหยุดดำเนินการ!
กล่าวอีกนัยหนึ่ง - หากคุณมีการทดสอบ 2 ครั้งขึ้นไปในวิธีเดียว ตัวอย่างเช่น:
$this->expectException(LengthException::class); $this->assertEquals(8, $result, "สองยกกำลังสาม"); จากนั้นเมื่อรันการทดสอบครั้งแรกโดยมีข้อยกเว้น การทดสอบครั้งที่สองจะถูกข้ามไป (โดยได้รับข้อยกเว้น) ดังนั้นคุณต้องทำการทดสอบข้อยกเว้นในวิธีการที่แตกต่างกัน
หรือ:
- ออกแบบลอง...จับบล็อกในวิธีทดสอบ

- ใช้ผู้ให้บริการข้อมูล

การวิเคราะห์ความครอบคลุมของโค้ดโดยการทดสอบ เนื่องจากมีคลาสจำนวนมาก คุณอาจลืมทดสอบวิธีการบางอย่างหรือเวอร์ชันต่างๆ ของผลลัพธ์ที่คลาสเหล่านั้นส่งคืน คุณยังสามารถเลื่อนบางสิ่งบางอย่างออกไปในภายหลังหรือตัดสินใจทดสอบสิ่งที่คุณไม่เคยตั้งใจจะทำมาก่อนกะทันหันก็ได้ จะตรวจสอบได้อย่างรวดเร็วว่าสิ่งใดที่ทดสอบแล้วและสิ่งใดที่ยังไม่ได้ทดสอบ!! PHPUnit ใช้เครื่องมือสำหรับสิ่งนี้:.

php-code-coverage.php หากต้องการใช้งาน คุณต้องเชื่อมต่อส่วนขยาย PHP ก่อน Xdebug
ในไฟล์ล่าม php - php.ini ในเปิดเซิร์ฟเวอร์ ไฟล์ php.ini
เมนู -> ขั้นสูง -> การกำหนดค่า -> PHP
ไฟล์การกำหนดค่าจะเปิดขึ้นในตำแหน่งที่คุณต้องการยกเลิกการใส่เครื่องหมายบรรทัด (ลบเครื่องหมายอัฒภาคด้านหน้าออก):
;zend_extension="e:/openserver/modules/php/PHP-5.6/ext/php_xdebug.dll"
หลังจากทำการเปลี่ยนแปลงแล้ว อย่าลืมรีสตาร์ทเซิร์ฟเวอร์

ตรวจสอบว่ามีการเชื่อมต่อส่วนขยายหรือไม่ ให้รันสคริปต์ด้วยคำสั่ง:
phpinfo();
หรือเปิดลิงค์ http://127.0.0.1/openserver/phpinfo.php ต้องมีบล็อก"».

xdebug
การดำเนินการ: phpunit --coverage-html tests\coverage ที่นี่ เราระบุว่าควรจัดทำรายงานเป็นแบบคงที่ไฟล์ HTML

และวางไว้ในโฟลเดอร์ครอบคลุมซึ่งจะปรากฏในไดเร็กทอรีการทดสอบ กำลังเปิดไฟล์ดัชนี.html

จากโฟลเดอร์ความครอบคลุม คุณสามารถดูรายการคลาสที่รวมอยู่ในรายงานได้ เมื่อคุณคลิกที่ชื่อชั้นเรียน หน้าที่มีสถิติสำหรับชั้นเรียนนั้นจะเปิดขึ้น ตัวอย่าง: เส้นสีแดงเน้นส่วนที่พลาดไปเมื่อสร้างการทดสอบ นั่นคือในกรณีนี้คุณต้องเขียนแบบทดสอบซึ่งวิธีนี้
จะกลับมาเป็นเท็จ
หากเกิดข้อผิดพลาดขณะดำเนินการคำสั่ง:
ไม่มีการกำหนดค่าไวท์ลิสต์ จะไม่มีการสร้างการครอบคลุมโค้ด จากนั้นคุณจะต้องเปลี่ยน/สร้างไฟล์ phpunit.xml ในรูทโปรเจ็กต์และแทรกบล็อกที่นั่น
ระบุไดเร็กทอรีที่จะตรวจสอบ: แอป ที่นี่เราระบุว่าคุณต้องตรวจสอบการครอบคลุมโค้ดด้วยการทดสอบไฟล์ .php จากแค็ตตาล็อก.

แอป มีการใช้บล็อกด้วย
เพื่อระบุไดเร็กทอรีและไฟล์ที่ไม่ต้องสแกน

รายละเอียดเพิ่มเติมในเอกสารประกอบ เมื่อทำงานร่วมกับ Composer ในบรรทัดคำสั่ง หากต้องการใช้งาน คุณต้องเชื่อมต่อส่วนขยาย PHP ก่อนโดยเปิดใช้งานส่วนขยาย php
อาจมีข้อความปรากฏขึ้น:
คุณกำลังใช้งาน composer โดยเปิดใช้งาน xdebug สิ่งนี้มีผลกระทบอย่างมากต่อประสิทธิภาพรันไทม์ ดู https://getcomposer.org/xdebug

ซึ่งบอกว่าการเปิดใช้งานส่วนขยาย xdebug มีผลกระทบอย่างมากต่อประสิทธิภาพ (ลดลง) อ่านวิธีแก้ปัญหานี้ใน .

ในบทความถัดไป ฉันจะบอกวิธีทำงานกับการจำลองวัตถุ (จำลอง) ซึ่งจะรวบรวมบทความเกี่ยวกับพื้นฐานของการใช้ PHPUnit ให้สมบูรณ์

พวกคุณทำการทดสอบหน่วยใน PHP หรือไม่? ฉันไม่แน่ใจว่าฉันเคยทำสิ่งนี้มาก่อน...มันคืออะไร?

assertEquals(0, นับ($สแต็ค));

array_push($stack, "foo");

ฉันชอบฝึกสิ่งที่เรียกว่า TDD โดยใช้ระบบทดสอบหน่วย (ใน PHP ซึ่งก็คือ phpunit)

สิ่งที่ฉันชอบเกี่ยวกับ phpunit ก็คือมันเสนอการครอบคลุมโค้ดผ่าน xdebug ด้วย ดังที่คุณเห็นจากภาพด้านล่าง ชั้นเรียนของฉันครอบคลุมการทดสอบ 100% ซึ่งหมายความว่าทุกบรรทัดจากคลาส Authentication ของฉันได้รับการตรวจสอบแล้ว ซึ่งทำให้ฉันมั่นใจว่าโค้ดกำลังทำในสิ่งที่ควรจะเป็น โปรดทราบว่าความครอบคลุมไม่ได้หมายความว่าโค้ดของคุณได้รับการทดสอบอย่างดีเสมอไป คุณสามารถมีความครอบคลุม 100% โดยไม่ต้องทดสอบโค้ดการผลิตแม้แต่บรรทัดเดียว

เน็ตบีน

โดยส่วนตัวแล้วฉันชอบทดสอบโค้ดของฉันใน Netbeans (สำหรับ PHP) ด้วยการคลิกเมาส์ง่ายๆ (alt+f6) ฉันสามารถทดสอบโค้ดทั้งหมดของฉันได้ ซึ่งหมายความว่าฉันไม่จำเป็นต้องออกจาก IDE ซึ่งฉันชอบจริงๆ และช่วยประหยัดเวลาในการสลับระหว่างเซสชัน

นี่เป็นส่วนแรกของซีรีส์ "PHPUnit สำหรับผู้เริ่มต้น" ในคู่มือนี้ เราจะอธิบายว่าทำไมจึงต้องครอบคลุมโค้ดของคุณด้วยการทดสอบหน่วยและประสิทธิภาพของเครื่องมือ PHPUnit อย่างเต็มประสิทธิภาพ ในตอนท้ายเราจะเขียนการทดสอบง่ายๆ โดยใช้ PHPUnit
  • PHPUnit สำหรับผู้เริ่มต้น ส่วนที่ 1: เริ่มใช้งาน

ประเภทของการทดสอบ

ก่อนที่เราจะเจาะลึก PHPUnit มาดูรายละเอียดกันก่อน ประเภทต่างๆการทดสอบ ขึ้นอยู่กับว่าคุณต้องการจัดหมวดหมู่อย่างไร PHPUnit จะใช้การทดสอบการพัฒนาซอฟต์แวร์ทุกประเภท

มาจัดหมวดหมู่การทดสอบตามระดับความจำเพาะกัน ตามวิกิพีเดีย โดยทั่วไปแล้ว ระดับการทดสอบที่ได้รับการยอมรับมี 4 ระดับ:

หากเราใส่ประเภทการทดสอบลงในปิระมิด มันจะมีลักษณะดังนี้:

PHPUnit คืออะไร

เมื่อมองดูปิรามิดที่อยู่ด้านบน เราสามารถพูดได้ว่าการทดสอบหน่วยเป็นองค์ประกอบสำคัญสำหรับการทดสอบประเภทอื่นๆ ทั้งหมด เมื่อเราสร้างรากฐานที่แข็งแกร่ง เราก็สามารถสร้างแอปพลิเคชันที่ยั่งยืนได้ อย่างไรก็ตาม การเขียนการทดสอบด้วยตนเองและดำเนินการทดสอบทุกครั้งที่คุณทำการเปลี่ยนแปลงถือเป็นกระบวนการที่ต้องใช้แรงงานมาก หากมีเครื่องมือที่ทำให้กระบวนการนี้เป็นแบบอัตโนมัติ การทดสอบการเขียนจะกลายเป็นประสบการณ์ที่สนุกสนานยิ่งขึ้น

นี่คือที่มาของ PHPUnit ปัจจุบัน PHPUnit เป็น Unit Testing Framework ที่ได้รับความนิยมมากที่สุดใน PHP นอกเหนือจากการมีคุณสมบัติเช่นวัตถุจำลองแล้ว ยังสามารถวิเคราะห์การครอบคลุมโค้ด การบันทึก และมอบคุณสมบัติอื่น ๆ นับพันรายการ

มาติดตั้ง PHPUnit บนระบบของเรา:

  1. ดาวน์โหลด: PHPUnit ได้รับการเผยแพร่ในรูปแบบไฟล์ PHAR (PHp ARhive) คุณสามารถดาวน์โหลดได้
  2. เพิ่มเส้นทางไปยังตัวแปรระบบ $PATH: หลังจากดาวน์โหลดไฟล์ PHAR แล้ว ตรวจสอบให้แน่ใจว่าไฟล์ดังกล่าวสามารถเรียกใช้งานได้และเส้นทางที่ไฟล์นั้นอยู่ได้รับการลงทะเบียนในตัวแปรระบบ $PATH ที่. คุณสามารถเรียกใช้งานได้จากทุกที่

หากคุณกำลังทำงานบนระบบที่มีลักษณะคล้าย Unix คุณสามารถทำได้โดยใช้คำสั่งต่อไปนี้:

$ wget https://phar.phpunit.de/phpunit.phar $ chmod +x phpunit.phar $ sudo mv phpunit.phar /usr/local/bin/phpunit

หากคุณทำทุกอย่างถูกต้อง คุณสามารถดูเวอร์ชันของ PHPUnit ที่ติดตั้งได้โดยพิมพ์คำสั่งในเทอร์มินัลของคุณ:

$phpunit --version

การทดสอบหน่วยแรกของคุณ

ถึงเวลาเขียนแบบทดสอบหน่วยแรกของคุณแล้ว! ก่อนอื่น เราต้องการคลาสที่เราจะทดสอบ มาเขียนคลาสง่ายๆ ที่เรียกว่าเครื่องคิดเลขกันดีกว่า และลองเขียนทดสอบดูกัน

สร้างไฟล์ "Calculator.php" และคัดลอกโค้ดด้านล่างลงไป คลาสเครื่องคิดเลขนี้มีวิธีการเพิ่มเพียงวิธีเดียวเท่านั้น

เครื่องคำนวณคลาส ( ฟังก์ชั่นสาธารณะ add($a, $b) ( return $a + $b; ) )

ตอนนี้สร้างไฟล์ทดสอบ "CalculatorTest.php" และคัดลอกโค้ดต่อไปนี้ลงไป เราจะดูแต่ละวิธีโดยละเอียด

ต้องการ "Calculator.php"; class CalculatorTests ขยาย PHPUnit_Framework_TestCase ( $calculator ส่วนตัว; protected function setUp() ( $this->calculator = new Calculator(); ) protected function TearDown() ( $this->calculator = NULL; ) public function testAdd() ( $result = $this->เครื่องคิดเลข->เพิ่ม(1, 2); $this->assertEquals(3, $result) )

  • บรรทัดที่ 2: เชื่อมต่อไฟล์ของคลาส Calculator.php ที่ทดสอบแล้ว เนื่องจากนี่คือคลาสที่เราจะทดสอบในไฟล์นี้ ตรวจสอบให้แน่ใจว่าได้รวมคลาสนั้นไว้ด้วย
  • บรรทัดที่ 8: setUp() เป็นวิธีการที่ถูกเรียกก่อนการทดสอบแต่ละครั้ง จำเขาไว้ เรียกว่าก่อนการทดสอบแต่ละครั้งซึ่งหมายความว่าหากคุณเพิ่มวิธีทดสอบอื่นให้กับคลาสนี้ ก็จะถูกเรียกก่อนหน้าคลาสนั้นด้วย
  • บรรทัดที่ 13: คล้ายกับเมธอด setUp() จะมีการเรียกใช้ TearDown() หลังจากการทดสอบแต่ละครั้ง
  • บรรทัดที่ 18: testAdd() เป็นวิธีทดสอบสำหรับเมธอด add() PHPUnit จะจดจำทุกวิธีที่เริ่มต้นด้วย test เป็นวิธีการทดสอบและรันโดยอัตโนมัติ จริงๆ แล้ววิธีนี้ง่ายมาก อันดับแรกเราเรียกเมธอด Calculator::add() เพื่อคำนวณค่า 1 บวก 2 จากนั้นเราตรวจสอบว่าเมธอดนี้ส่งคืนค่าที่ถูกต้องโดยใช้ assertEquals() จาก PHPUnit

ส่วนสุดท้ายของงานที่ทำคือการรัน PHPUnit และตรวจสอบว่าการทดสอบทั้งหมดผ่าน (ทำงานโดยไม่มีข้อผิดพลาด) ในเทอร์มินัลของคุณ ไปที่ไดเร็กทอรีที่คุณสร้างไฟล์ทดสอบและรันคำสั่งต่อไปนี้:

$phpunit CalculatorTest.php

หากคุณทำทุกอย่างถูกต้อง คุณจะเห็นสิ่งนี้:

PHPUnit 3.7.32 โดย Sebastian Bergmann - เวลา: 31ms, หน่วยความจำ: 2.25Mb OK (การทดสอบ 1 ครั้ง, การยืนยัน 1 ครั้ง)

บทสรุป

เราได้เสร็จสิ้นบทช่วยสอนแรกในชุด "PHPUnit สำหรับผู้เริ่มต้น" แล้ว ในบทความถัดไป เราจะแสดงวิธีใช้ผู้ให้บริการข้อมูลในการทดสอบของคุณ

เราหวังว่าคำแนะนำง่ายๆ นี้จะช่วยคุณในการพัฒนาและช่วยคุณในการเริ่มต้นใช้งานการทดสอบหน่วย

หากคุณชอบการแปลในหัวข้อนี้ อ่านเราได้ที่

ขอให้เป็นวันที่ดีทุกคน! วันนี้ฉันอยากจะพูดคุยกับคุณว่ามันคืออะไร การทดสอบหน่วยใน PHP.

เมื่อเขียนถึงที่สุดแล้ว โปรแกรมง่ายๆคุณจะต้องหยุดและปรับโครงสร้างเป็นระยะๆ เพื่อทำความเข้าใจว่าโปรแกรมเขียนถูกต้องหรือไม่ ก การปรับโครงสร้างโค้ดใน PHPฉันได้พูดคุยเกี่ยวกับเรื่องนี้แล้วในสิ่งพิมพ์ฉบับหนึ่งบนเว็บไซต์ซึ่งคุณสามารถอ่านได้

โดยทั่วไปแล้ว แน่นอนว่าแนวทางนี้ไม่เลว แต่ก็มีข้อเสียที่สำคัญ ตัวอย่างเช่น เมื่อเขียนโปรเจ็กต์ที่ค่อนข้างใหญ่ โค้ดจะค่อยๆ อุดตันโดยมีฟังก์ชันการดีบักแบบใส่ความคิดเห็น เช่น พิมพ์หรือ print_r.ในกรณีของการทำงานในโครงการของคุณเอง รหัสที่ไม่มีใครอ่านหรือแทบจะไม่มีใครอ่านเลย มันก็จะสมเหตุสมผลในระดับหนึ่ง

อย่างไรก็ตาม ลองจินตนาการถึงสถานการณ์นี้: คุณเขียนเว็บไซต์สำหรับลูกค้าโดยใช้ระบบจัดการเนื้อหาของคุณเอง ลูกค้ามีความสุข คุณรู้สึกดีมาก แต่วันหนึ่งคุณตระหนักว่าระบบที่คุณพัฒนาไม่ตรงตามข้อกำหนดอีกต่อไป มันจำเป็นต้องมีการเปลี่ยนแปลง และคุณเริ่มเขียนส่วนหนึ่งของระบบใหม่ ทีละส่วน

มีเวลามาถึงเมื่อหนึ่ง ชั้นเรียนใหม่วิธีการ สภาวะ หรือวงจร - ทำลายทั้งระบบ การเปลี่ยนแปลงในที่หนึ่งนำไปสู่ข้อผิดพลาดในที่อื่น และตอนนี้พวกเขากำลังปีนขึ้นไปอย่างไม่สิ้นสุดราวกับมาจากความอุดมสมบูรณ์และเห็นได้ชัดว่าสิ่งนี้เป็นไปไม่ได้อีกต่อไป และทุกอย่างจะดีกว่านี้มากหากพวกเขาเขียนไว้ก่อน การทดสอบหน่วย PHP- ไม่ใช่เพื่ออะไรเลยที่ Martin Fowler พูด เมื่อใดก็ตามที่คุณพยายามพิมพ์อะไรบางอย่างผ่าน พิมพ์เพื่อวัตถุประสงค์ในการดีบักหรือปรับโครงสร้างใหม่ ควรเขียนเป็นดีกว่า การทดสอบหน่วย.

ดูเหมือนว่าเราจะคุ้นเคยกับทฤษฎีแล้ว ตอนนี้เรามาดูโค้ดกันดีกว่า ต้องทำหมายเหตุสำคัญที่นี่ การดำเนินการทั้งหมดจะดำเนินการบนพีซีที่ทำงานอยู่ วินโดวส์ 7พร้อมติดตั้ง PHP7รุ่นต่างๆ ต่อไปจะเล่าทีละจุด

2) ย้ายไฟล์ที่ดาวน์โหลดไปยังโฟลเดอร์ ค:\bin- สร้างไฟล์ในโฟลเดอร์เดียวกัน phpunit.batให้เขียนเนื้อหาต่อไปนี้ลงไป: @php C:\bin\phpunit-6.3.0.phar %*

โปรดทราบว่าเส้นทาง ค:\binจะต้องถูกกำหนดไว้ในตัวแปรระบบ เส้นทางมิฉะนั้นเมื่อคุณพยายามดำเนินการคำสั่งในคอนโซล phpunitคุณจะได้รับข้อผิดพลาด!

3) เปิดคอนโซลและรันคำสั่ง phpunitและหากทุกอย่างถูกต้องแล้ว help ควรแสดงในคอนโซล

แน่นอนว่ายังมีวิธีอื่นอยู่ การติดตั้ง PHPUnitอย่างไรก็ตามฉันพบ วิธีนี้ยอมรับได้มากที่สุด สำหรับข้อมูลเพิ่มเติม คุณสามารถเยี่ยมชมเว็บไซต์อย่างเป็นทางการของโครงการได้ตลอดเวลา PHPUnit- การติดตั้งเสร็จสมบูรณ์ ตอนนี้เรามาดูโค้ดกันโดยตรง

// ไฟล์ StackTest.php ซึ่งอยู่ในไดเร็กทอรี C:/Projects/php/tests
// เชื่อมต่อคลาสหลัก TestCase จากเนมสเปซ PHPUnit\Framework
ใช้ PHPUnit\Framework\TestCase;

// กำหนดคลาสภายใต้การทดสอบเป็นการสืบทอดของคลาส TestCase
คลาส StackTest ขยาย TestCase
{
// ฟังก์ชั่นที่กำลังทดสอบเป็นแบบสาธารณะและเริ่มต้นด้วยคำว่า test
ฟังก์ชั่นสาธารณะ testPushAndPop()
{
$สแต็ค = ; // สร้างอาร์เรย์
// และตรวจสอบคำสั่ง assert เพื่อให้แน่ใจว่าจำนวนองค์ประกอบในอาร์เรย์เป็นศูนย์
$นี่->

$this->assertEquals("foo", array_pop($stack));
$this->assertEquals(0, นับ($stack));
}
}
?>

รหัสได้รับการแสดงความคิดเห็นอย่างดี แต่ฉันจะชี้แจงสองสามประเด็น รากฐานที่สำคัญ การทดสอบหน่วยคือข้อความ ( การยืนยัน- การยืนยันคือการสันนิษฐานของคุณเกี่ยวกับค่าที่คาดหวัง หรืออีกนัยหนึ่งคุณยืนยันว่าค่าของตัวแปร องค์ประกอบอาร์เรย์ ผลลัพธ์ของการดำเนินการเมธอด ฯลฯ จะเท่ากับค่าดังกล่าวและค่าดังกล่าว ในตัวอย่างด้านบน เมื่อสร้างอาร์เรย์ครั้งแรก ค่าที่คาดหวังของความยาวของอาร์เรย์จะเป็น 0 จริงๆ แล้วนี่เป็นกรณีในตัวอย่างของเรา

ในกรณีนี้เราใช้เพียงคำสั่งเดียวเท่านั้น ยืนยันเท่ากับแม้ว่าในชั้นเรียน กรณีทดสอบห้องสมุด PHPUnitพูดได้เลยว่ามีหลายโหลสำหรับทุกโอกาส

เราก็เขียนข้อสอบแล้วไงต่อ? และแล้วก็ต้องเปิดตัว ในการดำเนินการนี้ ให้เปิดคอนโซล ไปที่โฟลเดอร์ที่มีการทดสอบของเรา ( การทดสอบหน่วย PHPมักจะอยู่ในโฟลเดอร์แยกต่างหาก การทดสอบ) และรันคำสั่ง phpunitโดยส่งผ่านไดเร็กทอรีปัจจุบันเป็นอาร์กิวเมนต์ (ระบุด้วยจุดเดียว)

ซีดี C:/Projects/php/tests && phpunit

คำสั่งนี้จะผ่านไปทั้งหมดโดยอัตโนมัติ การทดสอบ PHPซึ่งอยู่ในแค็ตตาล็อกนี้ เมื่อดำเนินการเสร็จสิ้น ระบบจะแสดงข้อมูลเกี่ยวกับจำนวนการทดสอบที่ผ่านการทดสอบและอาจล้มเหลว

ดังนั้นวันนี้เราจึงได้ค้นพบว่า Unit Testing ใน PHP คืออะไรว่าการใช้มันไม่เพียงแต่มีประโยชน์แต่ยังจำเป็นอีกด้วย และถ้าคุณรู้ PHPแย่หรือไม่รู้เลยโดยเฉพาะสำหรับคุณฉันมีหลักสูตรวิดีโอที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่งฉันพูดคุยในหัวข้อโดยละเอียด การทดสอบหน่วยใน PHP.

สคริปต์การสอนใน PHP นี้แสดงให้เห็นว่าการทดสอบสามารถเขียนเป็นชุดคำถามและคำตอบชุดเดียวได้อย่างไร เนื่องจากอาจมีคำถามได้หลายประเภท (เลือก "ใช่" - "ไม่" เลือกหนึ่งในหลายตัวเลือก ป้อนตัวเลขหรือสตริงเป็นคำตอบ) เราจึงไม่จำเป็นต้องมีเพียงอาร์เรย์ แต่ อาร์เรย์ของอาร์เรย์แต่ละองค์ประกอบจะอธิบายทุกสิ่งที่จำเป็นในการแสดงและตรวจสอบคำถามถัดไป สิ่งเหล่านี้จะเป็นบันทึกที่มีคีย์ต่อไปนี้:

  • "q" - แสดงข้อความคำถาม
  • "t" - ประเภทคำถามที่ตรงกับความต้องการ แท็ก HTML: "ช่องทำเครื่องหมาย" สำหรับช่องทำเครื่องหมาย "ใช่/ไม่ใช่", "ข้อความ" สำหรับสตริงหรือตัวเลขเป็นคำตอบ "เลือก" - สำหรับรายการที่คุณต้องเลือกหนึ่งค่าจากหลายค่า เราใช้การเลือกมากกว่าหนึ่งค่าด้วยองค์ประกอบ "การเลือกหลายรายการ" ที่เราประดิษฐ์ขึ้น ซึ่งเป็นกลุ่มของช่องทำเครื่องหมายที่ประมวลผลร่วมกัน อันที่จริงเป็นรายการมาตรฐาน "; foreach ($test as $key=>$val) ( error_check ($val); echo ($counter++). "; switch ($val["t"]) ( case "checkbox": echo $val [" คิว"]" "; break; case "text": $len = strlen ($val["a"]); echo $val["q"]" ".$item; เสียงสะท้อน" "; break; case "multiselect": $i = explode ("|",$val["i"]); echo $val["q"].": "; foreach ($i as $number=>$ item) สะท้อน $item"
    "; แตก; ) เสียงก้อง" "; ) ฟังก์ชั่น error_check ($q) ( $question_types = array ("checkbox", "text", "select", "multiselect"); $error = ""; if (!isset($q["q"] ) หรือว่างเปล่า($q["q"])) $error="ไม่มีข้อความคำถามหรือว่างเปล่า"; อย่างอื่นถ้า (!isset($q["t"]) หรือว่างเปล่า($q["t "]) ) $error="ไม่ได้ระบุประเภทคำถามหรือว่างเปล่า"; else if (!in_array($q["t"],$question_types)) $error="ระบุประเภทคำถามไม่ถูกต้อง"; else if (!isset( $q[ "a"]) หรือว่างเปล่า($q["a"]) และ $q["a"]!="0") $error="ไม่มีข้อความตอบกลับหรือว่างเปล่า"; else ( if ($q[" t"]=="ช่องทำเครื่องหมาย" และ !($q["a"]=="0" หรือ $q["a"]=="1")) $error = "การตอบกลับ 0 หรือ 1 ได้รับอนุญาตสำหรับปุ่มตัวเลือก" ; else if ($q["t"]=="select" || $q["t"]=="multiselect") ( if (!isset($q[" i"]) หรือ Empty($q ["i"])) $error="No list element specified"; else ( $i = explode ("|",$q["i"]); if (count( $i)<2) $error="Нет хотя бы 2 элементов списка вариантов ответа с разделителем |"; foreach ($i as $s) if (strlen($s)<1) { $error = "Вариант ответа короче 1 символа"; break; } else { if ($q["t"]=="select" and !array_key_exists($q["a"],$i)) $error="Ответ не является номером элемента списка"; if ($q["t"]=="multiselect") { $a = explode ("|",$q["a"]); if (count($i)!=count($a)) $error="Число утверждений и ответов не совпадает"; foreach ($a as $s) if ($s!="0" and $s!="1") { $error = "Утверждение не отмечено как верное или неверное"; break; } } } } } } if (!empty($error)) { echo "

    พบข้อผิดพลาดในการทดสอบ: ".$error"

    ข้อมูลการแก้ไขข้อบกพร่อง:

    "; print_r ($q); exit; ) ) ฟังก์ชั่น strlwr_($s) yuya"; $len = strlen ($s);<$len; $i++) { $c = substr($s,$i,1); $n = strpos($c,$hi); if ($n!==FALSE) $c = substr ($lo,$n,1); $d .= $c; } return $d; } ?>





2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล