คำถามติดแท็ก phpunit

PHPUnit เป็นกรอบการทดสอบโปรแกรมเมอร์สำหรับ PHP เป็นตัวอย่างของสถาปัตยกรรม xUnit สำหรับเฟรมเวิร์กการทดสอบหน่วย


13
จะรันวิธีทดสอบเดี่ยวด้วย phpunit ได้อย่างไร
ฉันกำลังดิ้นรนที่จะใช้วิธีการทดสอบเดียวชื่อtestSaveAndDropในแฟ้มที่มีescalation/EscalationGroupTest.php phpunitฉันลองชุดค่าผสมต่อไปนี้: phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop ในแต่ละกรณีทั้งหมด Methode ทดสอบในไฟล์escalation/EscalationGroupTest.phpจะดำเนินการ วิธีการเลือกเพียงวิธีเดียวแทนได้อย่างไร ชื่อของคลาสคือEscalationGroupTestและรุ่นของphpunit3.2.8
335 php  phpunit 

8
แนวทางปฏิบัติที่ดีที่สุดในการทดสอบวิธีการป้องกันด้วย PHPUnit
ฉันพบการสนทนาในคุณทดสอบข้อมูลส่วนตัว ฉันได้ตัดสินใจแล้วว่าในบางชั้นฉันต้องการได้รับวิธีการป้องกัน แต่ทดสอบพวกเขา วิธีการเหล่านี้บางวิธีคงที่และสั้น เนื่องจากวิธีการส่วนใหญ่ของสาธารณชนใช้ประโยชน์จากมันฉันอาจจะสามารถลบการทดสอบในภายหลังได้อย่างปลอดภัย แต่สำหรับการเริ่มต้นด้วยวิธี TDD และหลีกเลี่ยงการดีบักฉันต้องการทดสอบพวกเขาจริงๆ ฉันคิดถึงสิ่งต่อไปนี้: Object Objectที่ได้รับคำแนะนำในคำตอบนั้นดูเหมือนจะเกินกำลังสำหรับเรื่องนี้ เริ่มต้นด้วยวิธีการสาธารณะและเมื่อรหัสครอบคลุมจะได้รับจากการทดสอบระดับที่สูงขึ้นให้เปิดการป้องกันและลบการทดสอบ สืบทอดคลาสที่มีส่วนต่อประสานที่ทดสอบได้ซึ่งทำให้วิธีการป้องกันเป็นแบบสาธารณะ แนวปฏิบัติที่ดีที่สุดคืออะไร มีอะไรอีกไหม? ดูเหมือนว่า JUnit จะเปลี่ยนวิธีการป้องกันโดยอัตโนมัติเพื่อให้เป็นแบบสาธารณะ แต่ฉันไม่ได้มองลึกลงไป PHP ไม่ปล่อยให้เรื่องนี้ผ่านการสะท้อน

16
วิธีการส่งออกใน CLI ในระหว่างการดำเนินการทดสอบหน่วย PHP?
เมื่อทำการทดสอบ PHPUnit ฉันต้องการถ่ายโอนข้อมูลออกเพื่อให้ฉันสามารถดีบักสิ่งหนึ่งหรือสอง ฉันลองต่อไปนี้ (คล้ายกับตัวอย่างคู่มือ PHPUnit ); class theTest extends PHPUnit_Framework_TestCase { /** * @outputBuffering disabled */ public function testOutput() { print_r("Hello World"); print "Ping"; echo "Pong"; $out = "Foo"; var_dump($out); } } ด้วยผลลัพธ์ต่อไปนี้: PHPUnit @package_version@ by Sebastian Bergmann. . Time: 0 seconds, Memory: 3.00Mb OK (1 test, 0 assertions) …

6
การทดสอบคลาสนามธรรม
ฉันจะทดสอบวิธีที่เป็นรูปธรรมของคลาสนามธรรมด้วย PHPUnit ได้อย่างไร ฉันคาดหวังว่าฉันจะต้องสร้างวัตถุบางอย่างเป็นส่วนหนึ่งของการทดสอบ แม้ว่าฉันไม่ทราบวิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้หรือถ้า PHPUnit อนุญาตสำหรับสิ่งนี้

11
ฉันจะรับ PHPUnit MockObjects เพื่อคืนค่าต่าง ๆ ตามพารามิเตอร์ได้อย่างไร
ฉันมีวัตถุจำลอง PHPUnit ที่ส่งคืน'return value'ไม่ว่าอาร์กิวเมนต์จะเป็นอย่างไร // From inside a test... $mock = $this->getMock('myObject', 'methodToMock'); $mock->expects($this->any)) ->method('methodToMock') ->will($this->returnValue('return value')); สิ่งที่ฉันต้องการจะทำคือคืนค่าที่แตกต่างกันตามอาร์กิวเมนต์ที่ส่งไปยังเมธอด mock ฉันลองทำสิ่งที่ชอบแล้ว: $mock = $this->getMock('myObject', 'methodToMock'); // methodToMock('one') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('one')) ->will($this->returnValue('method called with argument "one"')); // methodToMock('two') $mock->expects($this->any)) ->method('methodToMock') ->with($this->equalTo('two')) ->will($this->returnValue('method called with argument "two"')); แต่สิ่งนี้ทำให้ PHPUnit บ่นหากไม่มีการจำลองด้วยอาร์กิวเมนต์'two'ดังนั้นฉันคิดว่าคำจำกัดความของการmethodToMock('two')เขียนทับคำจำกัดความของคำแรก ดังนั้นคำถามของฉันคือ: มีวิธีการรับวัตถุ PHPUnit …

15
PHPUnit: ยืนยันว่าอาร์เรย์สองอาร์เรย์เท่ากัน แต่ลำดับขององค์ประกอบไม่สำคัญ
อะไรคือวิธีที่ดีในการยืนยันว่าอาร์เรย์ของออบเจ็กต์สองอาร์เรย์เท่ากันเมื่อลำดับขององค์ประกอบในอาร์เรย์ไม่สำคัญหรือแม้กระทั่งอาจมีการเปลี่ยนแปลง

12
SimpleTest กับ PHPunit
ฉันสงสัยว่าใครก็ตามที่มีประสบการณ์ในทั้งสองสิ่งนี้สามารถให้ความกระจ่างเกี่ยวกับความแตกต่างที่สำคัญระหว่างทั้งสองได้หรือไม่? ความแข็งแรงเฉพาะของแต่ละข้อที่เหมาะสำหรับกรณีใด ๆ ?

7
ความแตกต่างระหว่าง AssertEquals และ AssertSame ใน phpunit
PHPUnit มีเมธอด assertEquals: https://phpunit.de/manual/current/en/appendixes.assertions.html#appendixes.assertions.assertEquals นอกจากนี้ยังมีเมธอด assertSame: https://phpunit.de/manual/current/en/appendixes.assertions.html#appendixes.assertions.assertSame แวบแรกดูเหมือนว่าพวกเขาจะทำสิ่งเดียวกัน อะไรคือความแตกต่างระหว่างทั้งสอง? ทำไมถึงระบุทั้งคู่
121 phpunit 

5
วิธีการจำลอง phpunit การโทรหลายครั้งพร้อมอาร์กิวเมนต์ที่แตกต่างกัน
มีวิธีใดในการกำหนดการจำลองที่แตกต่างกันสำหรับอาร์กิวเมนต์อินพุตที่แตกต่างกันหรือไม่? ตัวอย่างเช่นฉันมีคลาสเลเยอร์ฐานข้อมูลที่เรียกว่า DB คลาสนี้มีเมธอดที่เรียกว่า "Query (string $ query)" ซึ่งเมธอดนั้นใช้สตริงเคียวรี SQL ในอินพุต ฉันสามารถสร้างการจำลองสำหรับคลาสนี้ (DB) และตั้งค่าการส่งคืนที่แตกต่างกันสำหรับการเรียกวิธีการสอบถามที่แตกต่างกันซึ่งขึ้นอยู่กับสตริงแบบสอบถามอินพุตได้หรือไม่
117 php  mocking  phpunit 

1
จะบอกให้ phpunit หยุดความล้มเหลวได้อย่างไร
ฉันกำลังใช้การทดสอบ phpunit ชุดใหญ่และฉันต้องการดูว่าการทดสอบใดล้มเหลวทันทีที่ล้มเหลวแทนที่จะรอให้การทดสอบทั้งหมดเสร็จสิ้นจากนั้นให้แสดงรายการความล้มเหลวทั้งหมด ฉันจะบอกให้ phpunit ทำสิ่งนี้ได้อย่างไร?

7
ทดสอบส่วนหัวของ PHP ด้วย PHPUnit
ฉันกำลังพยายามใช้ PHPunit เพื่อทดสอบคลาสที่แสดงผลส่วนหัวที่กำหนดเอง ปัญหาคือบนเครื่องของฉันสิ่งนี้: <?php class HeadersTest extends PHPUnit_Framework_TestCase { public function testHeaders() { ob_start(); header('Location: foo'); $headers_list = headers_list(); header_remove(); ob_clean(); $this->assertContains('Location: foo', $headers_list); } } หรือแม้แต่สิ่งนี้: <?php class HeadersTest extends PHPUnit_Framework_TestCase { public function testHeaders() { ob_start(); header('Location: foo'); header_remove(); ob_clean(); } } ส่งคืนข้อผิดพลาดนี้: name@host [~/test]# phpunit --verbose …

21
PHPUnit - 'ไม่มีการทดสอบที่ดำเนินการ' เมื่อใช้ไฟล์กำหนดค่า
ปัญหา เพื่อปรับปรุงคุณภาพของโค้ดฉันได้ตัดสินใจที่จะลองเรียนรู้วิธีทดสอบโค้ดของฉันโดยใช้การทดสอบหน่วยแทนที่จะเป็นโซลูชันการทดสอบระดับปานกลางที่ดีที่สุด ฉันตัดสินใจติดตั้ง PHPUnit โดยใช้โปรแกรมแต่งสำหรับไลบรารีส่วนตัวที่ช่วยให้ฉันสามารถใช้งานฟังก์ชันฐานข้อมูลทั่วไปได้ ตอนแรกฉันไม่มีไฟล์กำหนดค่าสำหรับ PHPUnit และเมื่อฉันรันคำสั่งเช่น: $ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest โปรดทราบว่านี่เป็นคำสั่งเทอร์มินัลดังนั้นฉันจึงไม่ได้รวม.phpส่วนขยายไว้ GeneralStringFunctionsTest ที่อ้างถึงข้างต้นเป็นGeneralStringFunctionsTest.phpไฟล์จริงๆ ผลลัพธ์คือสิ่งที่ฉันคาดหวัง: เวลา: 31 ms, หน่วยความจำ: 2.75Mb ตกลง (1 การทดสอบ 1 การยืนยัน) จากนั้นฉันพยายามใช้ไฟล์คอนฟิกูเรชันเพื่อโหลดชุดทดสอบโดยอัตโนมัติแทนที่จะต้องพิมพ์ไฟล์ด้วยตนเองทุกครั้ง ฉันสร้างไฟล์ที่เรียกว่าphpunit.xmlในไดเรกทอรีรากของฉันและป้อนสิ่งต่อไปนี้ลงในไฟล์: http://pastebin.com/0j0L4WBD : <?xml version = "1.0" encoding="UTF-8" ?> <phpunit> <testsuites> <testsuite name="Tests"> <directory>tests</directory> </testsuite> </testsuites> </phpunit> ตอนนี้เมื่อฉันรันคำสั่ง: phpunit ฉันได้รับผลลัพธ์ต่อไปนี้: PHPUnit 4.5.0 โดย Sebastian …

3
จะข้ามการทดสอบใน PHPunit ได้อย่างไร?
ฉันใช้ phpunit ในการเชื่อมต่อกับเจนกินส์และฉันต้องการข้ามการทดสอบบางอย่างโดยตั้งค่าการกำหนดค่าในไฟล์ XML phpunit.xml ฉันรู้ว่าฉันสามารถใช้ในบรรทัดคำสั่ง: phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest ฉันจะแปลไฟล์นั้นเป็นไฟล์ XML ได้อย่างไรเนื่องจาก<filters>แท็กมีไว้สำหรับการครอบคลุมโค้ดเท่านั้น ฉันต้องการเรียกใช้การทดสอบทั้งหมดนอกเหนือจาก testStuffThatAlwaysBreaks
89 php  phpunit 

7
phpunit หลีกเลี่ยงข้อโต้แย้งของตัวสร้างสำหรับการเยาะเย้ย
อะไรคือวิธีที่จะหลีกเลี่ยงไม่ให้ phpunit เรียกตัวสร้างสำหรับวัตถุจำลอง? มิฉะนั้นฉันจะต้องมีวัตถุจำลองเป็นอาร์กิวเมนต์ตัวสร้างอีกชิ้นหนึ่งสำหรับสิ่งนั้นเป็นต้น api ดูเหมือนจะเป็นดังนี้: getMock($className, $methods = array(), array $arguments = array(), $mockClassName = '', $callOriginalConstructor = TRUE, $callOriginalClone = TRUE, $callAutoload = TRUE) ฉันไม่ได้ทำงาน มันยังคงบ่นเกี่ยวกับอาร์กิวเมนต์ตัวสร้างแม้ว่าจะ$callOriginalConstructorตั้งค่าเป็นเท็จก็ตาม ฉันมีวัตถุเพียงชิ้นเดียวในตัวสร้างและเป็นการฉีดแบบพึ่งพา ดังนั้นฉันไม่คิดว่าฉันมีปัญหาในการออกแบบที่นั่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.