Entropy เป็นไลบรารีที่จัดเตรียมเครื่องมือสำหรับการทำงานกับการทดสอบแบบสุ่มใน PHPUnit รวมถึงระบบการทดสอบที่ใช้ฟังก์ชันสุ่มของ PHP เช่น rand
และ shuffle
บางครั้งการทดสอบหน่วยจำเป็นต้องมีการเปลี่ยนแปลงสถานะส่วนกลางหรือครอบคลุมฟังก์ชันการทำงานที่เปลี่ยนแปลงสถานะนั้น แม้ว่านี่จะไม่ใช่สถานการณ์ในอุดมคติ แต่ก็มักจะส่งผลให้เกิดการพึ่งพาการทดสอบอื่น ๆ โดยไม่ตั้งใจ
การเปิดใช้งานฟังก์ชันสับเปลี่ยนการทดสอบของ Entropy จะสุ่มลำดับการทดสอบของคุณ ซึ่งช่วยเน้นย้ำถึงการขึ้นต่อกันเหล่านี้
การสลับการทดสอบของเอนโทรปียังหลีกเลี่ยงการเปลี่ยนลำดับการทดสอบโดยใช้ฟังก์ชัน @depends
ของ PHPUnit งานในอนาคตจะทำงานเพื่อให้แน่ใจว่าการสับยังคงสามารถเกิดขึ้นได้สำหรับการทดสอบเหล่านี้เมื่อเหมาะสม
บางครั้งคุณอาจพบว่าตัวเองอยู่ในสถานการณ์ที่ช่วงของอินพุตสำหรับฟังก์ชันมีขนาดใหญ่มากจนการรับภาคตัดขวางของอินพุตเหล่านั้นเป็นการใช้ทรัพยากรของคุณอย่างมีประสิทธิภาพมากขึ้น แต่จะเกิดอะไรขึ้นถ้าหน้าตัดนั้นมีรูที่การทดสอบของคุณอาจล้มเหลว?
วิธีหนึ่งในการหลีกเลี่ยงปัญหานี้คือการใช้อินพุตแบบสุ่ม โดยที่อินพุตจะถูกสร้างขึ้นในลักษณะที่จะได้รับหน้าตัดแบบสุ่มของช่วง กล่าวอีกนัยหนึ่งคือการใช้ rand
หรือวิธีการอื่นที่ไม่ได้กำหนดไว้
ส่วนขยายของการทดสอบตามคุณสมบัตินี้คือการฝึกใช้อินพุตแบบสุ่มกับแอปพลิเคชันหรือฟังก์ชันของคุณ และการสังเกตว่าเอาต์พุตเป็นไปตามกฎบางอย่างหรือมีคุณสมบัติบางอย่างที่สัมพันธ์กับอินพุต แทนที่จะทดสอบความแม่นยำของความเท่าเทียมกันกับผลลัพธ์ที่ทราบ ชุด.
ด้วยการจัดการเมล็ดสุ่มสำหรับการทดสอบของคุณ เอนโทรปีไม่เพียงแต่อนุญาตให้ใช้วิธีการเหล่านี้เท่านั้น แต่ยังทำให้สามารถทำซ้ำได้ด้วย โดยการยอมรับเมล็ดคงที่หรือกู้คืนจากการเรียกใช้ครั้งล่าสุดที่ล้มเหลวจนกว่าชุดการทดสอบของคุณจะผ่าน
คุณสามารถเพิ่มไลบรารีนี้ในโครงการของคุณโดยใช้ Composer:
$ composer require datto/phpunit-entropy
เมื่อกำหนดค่าแล้ว คุณสามารถเรียกใช้ชุดทดสอบของคุณได้ตามปกติ ผู้ฟังจะดูแลตัวเอง เมื่อการทดสอบเกิดข้อผิดพลาดหรือล้มเหลว เมล็ดพืชที่ใช้จะถูกจัดเก็บไว้ในไฟล์ชั่วคราว เพื่อที่ว่าในการเรียกใช้ครั้งต่อไปจะถูกนำมาใช้ซ้ำ แทนที่จะสร้างเมล็ดพืชใหม่
ข้อมูลเบื้องต้นสำหรับเครื่องสร้างตัวเลขสุ่มนั้นมาจากสถานที่สูงสุดสี่แห่ง ซึ่งแสดงไว้ที่นี่ตามลำดับความสำคัญ
หากตั้งค่าไว้ ตัวแปรสภาพแวดล้อม SEED
จะถูกนำมาใช้เพื่อแทนที่การตั้งค่าอื่นๆ สามารถตั้งค่าผ่าน export
แต่การใช้งานที่แนะนำคือตั้งค่าสำหรับการรันปัจจุบันเท่านั้น:
SEED=123456 phpunit -c phpunit.xml tests
เมล็ดอาจได้รับการแก้ไขโดยการกำหนดค่า ดูส่วนการกำหนดค่าด้านล่าง
หากการทดสอบการทำงานล้มเหลว เมล็ดที่ใช้จะถูกจัดเก็บไว้ในไฟล์ชั่วคราว จากนั้นจะโหลดสิ่งนี้ในการทดสอบครั้งต่อไป และจะคงอยู่จนกว่าชุดโปรแกรมจะสำเร็จอีกครั้ง
หากไม่มีการตั้งค่า seed ด้วยวิธีการข้างต้น วิธีสุดท้ายคือใช้ฟังก์ชัน rand
ของ PHP
เมื่อติดตั้งผ่านผู้แต่งแล้ว การกำหนดค่า Listener ทดสอบเป็นเพียงเรื่องของการแก้ไขไฟล์การกำหนดค่า PHPUnit ของคุณ (มักจะเป็น phpunit.xml
):
< phpunit xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : noNamespaceSchemaLocation = " http://schema.phpunit.de/4.1/phpunit.xsd "
backupGlobals = " false "
colors = " true "
bootstrap = " bootstrap.php "
>
< listeners >
< listener class = " DattoPHPUnitEntropyListener " >
< arguments >
< array >
< element key = " seeding " >
< array >
< element key = " enabled " >
< boolean >true</ boolean >
</ element >
< element key = " seed " >
< integer >1234567</ integer >
</ element >
< element key = " file " >
< string >/tmp/phpentropy-seed</ string >
</ element >
</ array >
</ element >
< element key = " shuffle " >
< boolean >true</ boolean >
</ element >
</ array >
</ arguments >
</ listener >
</ listeners >
</ phpunit >
หากตั้งค่าเป็นจริง เครื่องสร้างตัวเลขสุ่มจะถูกเพาะโดยผู้ฟัง
หากคุณตั้งค่าการเริ่มข้อมูลผ่านอาร์กิวเมนต์นี้ เฉพาะค่านี้เท่านั้นที่จะถูกใช้เพื่อเริ่มต้นการสร้างตัวเลขสุ่ม ดูส่วนลำดับความสำคัญของเมล็ดพันธุ์ด้านล่าง
หากตั้งค่าไว้ ไฟล์นี้จะใช้เพื่อจัดเก็บเมล็ดสุ่มที่ล้มเหลวครั้งล่าสุด โดยค่าเริ่มต้นจะเป็น [TMPDIR LOCATION]/phpunit-entropy-seed
หากตั้งค่าเป็นจริง ลำดับการดำเนินการทดสอบหน่วยจะถูกสุ่ม (ยกเว้นชุดโปรแกรมที่ใช้ @depends
) สิ่งนี้มีประโยชน์ในการพิจารณาและระบุการขึ้นต่อกันของการทดสอบระหว่างกัน
คริสโตเฟอร์ โฮลท์ <[email protected]>