เวอร์ชันพีเอชพี | รุ่นอะตอม |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X (ปัจจุบัน) |
เช่นเดียวกับ SimpleTest หรือ PHPUnit atoum เป็นเฟรมเวิร์กการทดสอบหน่วยสำหรับภาษา PHP โดยเฉพาะ อย่างไรก็ตาม ได้รับการออกแบบตั้งแต่เริ่มต้นโดยคำนึงถึงแนวคิดต่อไปนี้:
สามารถดำเนินการ ได้รวดเร็ว ,
ลดความซับซ้อน ของการพัฒนาการทดสอบ
อนุญาตให้เขียนการทดสอบหน่วย ที่เชื่อถือได้ อ่านได้ และชัดเจน
เพื่อให้บรรลุเป้าหมายดังกล่าว จึงมีการใช้ความสามารถที่ได้รับจาก PHP อย่างหนาแน่น เพื่อให้นักพัฒนา มีวิธีใหม่ ในการเขียนการทดสอบหน่วย ดังนั้นจึงสามารถติดตั้งและรวมเข้ากับโปรเจ็กต์ที่มีอยู่ได้อย่างง่ายดายมาก เนื่องจากเป็นเพียงไฟล์ เก็บถาวร PHAR เดียว ซึ่งเป็นจุดเริ่มต้นเดียวสำหรับนักพัฒนา นอกจากนี้ ต้องขอบคุณ อินเทอร์เฟซที่คล่องแคล่ว ทำให้สามารถเขียนการทดสอบหน่วยในลักษณะที่ใกล้เคียงกับภาษาธรรมชาติได้ นอกจากนี้ยังทำให้ง่ายต่อการใช้งาน stubbing ในการทดสอบด้วยการใช้ ฟังก์ชันและการปิดที่ไม่ระบุชื่ออย่าง ชาญฉลาด atoum โดยกำเนิดและโดยค่าเริ่มต้น จะดำเนินการทดสอบแต่ละหน่วยภายในกระบวนการ PHP ที่แยกจากกัน เพื่อรับประกัน การแยกส่วน แน่นอนว่าสามารถนำไปใช้ได้อย่างราบรื่นเพื่อการบูรณาการอย่างต่อเนื่อง และด้วยการออกแบบ ทำให้สามารถรับมือกับความต้องการเฉพาะได้อย่างง่ายดายมาก atoum ยังดำเนินการทั้งหมดนี้ได้สำเร็จโดยไม่กระทบต่อประสิทธิภาพ เนื่องจากได้รับการพัฒนาให้มีพื้นที่หน่วยความจำลดลง ในขณะเดียวกันก็ช่วยให้ดำเนินการทดสอบได้รวดเร็วยิ่งขึ้น นอกจากนี้ยังสามารถสร้างรายงานการดำเนินการทดสอบหน่วยในรูปแบบ Xunit ซึ่งทำให้เข้ากันได้กับเครื่องมือบูรณาการอย่างต่อเนื่อง เช่น Jenkins atoum ยังสร้างรายงานการครอบคลุมโค้ด เพื่อให้สามารถดูแลการทดสอบหน่วยได้ สุดท้ายนี้ แม้ว่าจะถูกพัฒนาบน UNIX เป็นหลัก แต่ก็สามารถทำงานบน Windows ได้เช่นกัน
atoum ติดตั้งง่ายมาก: โคลนมันจาก github, ดาวน์โหลด PHAR หรือเพียงแค่ใช้นักแต่งเพลง
atoum มอบการรักษาความปลอดภัยระดับสูงระหว่างการทดสอบโดยแยกวิธีการทดสอบแต่ละวิธีในกระบวนการ PHP ของตัวเอง แน่นอนว่าฟีเจอร์นี้มีให้ใช้งานทันทีโดยไม่ต้องติดตั้งส่วนขยายเพิ่มเติมใดๆ
atoum ทำการทดสอบในสภาพแวดล้อมแบบขนานทำให้ชุดทำงานเร็วที่สุดเท่าที่จะเป็นไปได้โดยการใช้ประโยชน์จากซีพียูแบบมัลติคอร์ในปัจจุบัน
atoum มีชุดการยืนยันที่เป็นธรรมชาติและแสดงออกครบถ้วน ทำให้การทดสอบสามารถอ่านได้มากที่สุด นี่คือตัวอย่าง:
<?php$this->จำนวนเต็ม(150) -> isGreaterThan (100) -> ต่ำกว่าหรือเท่ากับ (200) -
atoum รองรับไวยากรณ์ที่คล้ายกับ BDD พร้อมด้วยคีย์เวิร์ดที่มีโครงสร้างจำนวนมาก:
<?php$this->given($testedInstance = new ทดสอบคลาส()) ->และ($testedClass[] = $firstValue = uniqid()) -> จากนั้น -> ขนาดของ ($ testedInstance) -> isEqualTo (1) ->string($testedClass[0])->isEqualTo($firstValue) -
atoum นำเสนอเครื่องยนต์จำลองที่เรียบง่าย แต่ทรงพลังมาก:
<?php$this->given($testedInstance = new ทดสอบคลาส()) ->และ($aMock = new mockfoobar()) // นี่คือการเยาะเย้ยของคลาส foobar ที่ถูกสร้างขึ้นแบบไดนามิก->และ($this->calling($aMock)->doOtherThing = true) // การโทรแต่ละครั้งไปยัง doOtherThing( ) โดยอินสแตนซ์จะส่งคืน true->และ($testedInstance->setDependency($aMock)) -> จากนั้น -> บูลีน ($ testedInstance-> doSomething ()) -> isTrue () -> จำลอง($aจำลอง) ->call('doOtherThing')->withArguments($testedInstance)->once() // ยืนยันว่าเมธอด doOtherThing() ของ $aMock ถูกเรียกครั้งเดียว;
atoum จัดเตรียม API ที่ชัดเจนเพื่อยืนยันข้อยกเว้น:
<?php$this->given($testedInstance = new ทดสอบคลาส()) ->และ($aMock = new mockfoobar()) // นี่คือการเยาะเย้ยของคลาส foobar ที่ถูกสร้างขึ้นแบบไดนามิก->และ($this->calling($aMock)->doOtherThing->throw = $Exceptionion = new ข้อยกเว้น( )) // การเรียกไปยัง doOtherThing() จะส่งข้อยกเว้น->และ($testedInstance->setDependency($aMock)) -> จากนั้น -> ข้อยกเว้น (ฟังก์ชั่น () ใช้ ($testedInstance) { $testedInstance->doSomething(); }) -> isIdenticalTo(ยกเว้น $) -
atoum ยังให้คุณจำลองฟังก์ชัน PHP ดั้งเดิมได้ ขอย้ำอีกครั้งว่าสิ่งนี้มีให้ใช้งานทันที:
<?php$this->given($this->function->session_start = false) ->และ($session = ใหม่ ทดสอบClass()) -> จากนั้น -> ข้อยกเว้น (ฟังก์ชั่น () ใช้ ($session) { $session->start(); }) ->isInstanceOf('ชื่อโครงการยกเว้น') ->hasMessage('ไม่สามารถเริ่มเซสชั่นได้') ->ฟังก์ชั่น('session_start')->wasCalled()->ครั้งเดียว() -
atoum สามารถสร้างรายงานได้หลายแบบ เช่น TAP, clover, xUnit เพื่อให้บูรณาการเข้ากับ Jenkins หรือเครื่องมือบูรณาการอย่างต่อเนื่องอื่นๆ ได้อย่างง่ายดาย
อะตอม สนับสนุนผู้ให้บริการข้อมูล
การทดสอบ atoum รองรับการทำงานอัตโนมัติ: เพียงรวม atoum runner และเริ่มการทดสอบของคุณโดยใช้ php path/to/test/file.php
ไฟล์การกำหนดค่าของ atoum เขียนด้วยภาษา PHP โดยเฉพาะ (ไม่มี XML, YAML หรือรูปแบบอื่นใด) ให้ความยืดหยุ่นสูงสุดแก่คุณ:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = ใหม่ atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); -> setTestedClassNamespace ('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$runner->setTestGenerator($testGenerator);
atoum มีเครื่องมือสร้างเทมเพลตการทดสอบอัตโนมัติ
atoum มีโหมดวนซ้ำเพื่อกระตุ้นการทดสอบที่ล้มเหลวอีกครั้งได้อย่างง่ายดาย
atoum เต็มไปด้วยคุณสมบัติที่น่าสนใจอื่น ๆ ที่คุณจะค้นพบเมื่อเวลาผ่านไป
atoum ต้องใช้ PHP >= 5.6.0
หรือใหม่กว่าจึงจะทำงานได้ บน UNIX เพื่อตรวจสอบว่าคุณมีเวอร์ชัน PHP ที่ถูกต้องหรือไม่ คุณเพียงแค่ต้องรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
$php -v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
หาก PHP 5.6.x
หรือเทียบเท่าปรากฏขึ้น แสดงว่าคุณได้ติดตั้งเวอร์ชัน PHP ที่ถูกต้องแล้ว หากคุณต้องการใช้ atoum โดยใช้ไฟล์เก็บถาวร PHAR คุณต้องใช้ PHP ด้วยจึงจะสามารถเข้าถึงโมดูล phar
ได้ ซึ่งโดยปกติจะพร้อมใช้งานตามค่าเริ่มต้น บน UNIX เพื่อตรวจสอบว่าคุณมีโมดูลนี้หรือไม่ คุณเพียงแค่ต้องรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
$php -m | grep -i ฟาร์
หาก Phar
หรือเทียบเท่าปรากฏขึ้น แสดงว่าโมดูลได้รับการติดตั้งอย่างถูกต้อง การสร้างรายงานในรูปแบบ Xunit ต้องใช้โมดูล xml
บน UNIX เพื่อตรวจสอบว่าคุณมีโมดูลนี้หรือไม่ คุณเพียงแค่ต้องรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
$php -m | grep -i xml
หาก Xml
หรือเทียบเท่าปรากฏขึ้น แสดงว่าโมดูลได้รับการติดตั้งอย่างถูกต้อง หากคุณต้องการตรวจสอบอัตราการครอบคลุมของโค้ดของคุณโดยการทดสอบหน่วย คุณจะต้องใช้โมดูล Xdebug 2.3 บน UNIX เพื่อตรวจสอบว่าคุณมีโมดูลนี้หรือไม่ คุณเพียงแค่ต้องรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
$php -v | grep -oi 'xdebug'
หาก Xdebug
หรือเทียบเท่าปรากฏขึ้น แสดงว่าโมดูลได้รับการติดตั้งอย่างถูกต้อง
คุณเพียงแค่ต้องดาวน์โหลดไฟล์เก็บถาวรของ PHAR และจัดเก็บไว้ในที่ที่คุณต้องการ เช่น ภายใต้ /path/to/project/tests/atoum.phar
ไฟล์เก็บถาวร PHAR นี้มีเวอร์ชันการพัฒนาล่าสุดที่ผ่านการทดสอบหน่วยของ Atom ทั้งหมด ซอร์สโค้ดของ atoum ยังมีให้ผ่านพื้นที่เก็บข้อมูล GitHub หากต้องการตรวจสอบว่า Atom ทำงานอย่างถูกต้องกับการกำหนดค่าของคุณหรือไม่ คุณสามารถดำเนินการทดสอบหน่วยทั้งหมดได้ เพื่อทำเช่นนั้น คุณเพียงแค่ต้องรันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
$ php atom.phar --ทดสอบมัน
ใช้โปรแกรมแก้ไขข้อความที่คุณต้องการ สร้าง path/to/project/tests/units/helloWorld.php
และเพิ่มโค้ดต่อไปนี้:
<?phpnamespace vendorprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use vendorproject;class helloWorld ขยาย atoumtest {ฟังก์ชั่นสาธารณะ testSay() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello World!'); - -
เปิดเทอร์มินัลของคุณและรันคำสั่งต่อไปนี้:
$ php path/to/test/file[ป้อน]
คุณควรได้รับผลลัพธ์ต่อไปนี้หรือสิ่งที่เทียบเท่า:
> atoum เวอร์ชัน XXX โดย Frédéric Hardy ข้อผิดพลาด: ข้อยกเว้นแบบอัตโนมัติ: ไม่มีคลาสที่ทดสอบ 'vendorprojecthelloWorld' สำหรับคลาสทดสอบ 'vendorprojecttestsunitshelloWorld'
ใช้โปรแกรมแก้ไขข้อความที่คุณต้องการอีกครั้ง สร้างไฟล์ path/to/project/classes/helloWorld.php
และเพิ่มโค้ดต่อไปนี้:
<?phpnamespace vendorproject;คลาส helloWorld {ฟังก์ชั่นสาธารณะพูด() {กลับมา 'สวัสดีชาวโลก!'; - -
ในเทอร์มินัลเดียวกัน ให้รันคำสั่งต่อไปนี้อีกครั้ง:
$ php path/to/test/file[ป้อน]
คุณควรได้รับผลลัพธ์ต่อไปนี้หรือสิ่งที่เทียบเท่า:
> atoum เวอร์ชัน 288 โดย Frédéric Hardy > เรียกใช้ vendorprojecttestsunitshelloWorld... [S___________________________________________________________][1/1] => ระยะเวลาการทดสอบ: 0.00 วินาที => การใช้หน่วยความจำ: 0.25 Mb.> ระยะเวลาการทดสอบทั้งหมด: 0.00 วินาที> การใช้หน่วยความจำทดสอบทั้งหมด: 0.25 Mb.> ค่าการครอบคลุมโค้ด: 100.00%> ระยะเวลาการทำงาน: 0.08 วินาที> สำเร็จ (1 การทดสอบ 1 วิธี 2 การยืนยัน , 0 ข้อผิดพลาด, 0 ข้อยกเว้น)!
<?phpnamespace vendorprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use vendorproject;class helloWorld ขยาย atoumtest { ฟังก์ชั่นสาธารณะ test__construct () {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello!') ->string($helloWorld->say($name = 'Frédéric Hardy'))->isEqualTo('Hello ' . $name . '!') - - -
เอกสารของ atom ยังคงถูกเขียนอยู่ ความช่วยเหลือใด ๆ ในการปรับปรุงจะได้รับการชื่นชม อย่างไรก็ตาม หากคุณต้องการสำรวจความเป็นไปได้ของ atoum เพิ่มเติมในทันที เราขอแนะนำ:
ทำงานในเทอร์มินัลของคุณ ไม่ว่าจะเป็นคำสั่ง php atoum.phar -h
หรือคำสั่ง php scripts/runner.php -h
,
สำรวจเนื้อหาของไดเร็กทอรี configurations
ในแหล่งที่มาของ atoum เนื่องจากมีตัวอย่างไฟล์การกำหนดค่า
สำรวจเนื้อหาของไดเร็กทอรี tests/unit/classes
ในซอร์สของ atoum เนื่องจากมีการทดสอบหน่วยทั้งหมด
อ่านสไลด์การประชุม (ฝรั่งเศส) เกี่ยวกับเรื่องนี้ มีให้ทางออนไลน์
อ่านวิกิ (ฝรั่งเศส)
เข้าร่วมช่องทางการสนทนา
ถามคำถามทางอีเมลที่ที่อยู่ support[AT]atoum(DOT)org
ในกรณีนี้ สิ่งแรกที่คุณจะต้องทำคือยืนยันว่าคุณมีไฟล์เก็บถาวรเวอร์ชันล่าสุดหรือไม่ คุณเพียงแค่ต้องดาวน์โหลดอีกครั้ง หากยังไม่ได้ผล ให้รันคำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล:
$php -natoum.phar -v
หากคุณได้รับหมายเลขเวอร์ชันของ Atom แสดงว่าปัญหามาจากการกำหนดค่า PHP ของคุณ ในกรณีส่วนใหญ่ สาเหตุจะอยู่ในส่วนขยายที่อาจเข้ากันไม่ได้กับรูปแบบ PHAR หรืออาจทำให้ไม่สามารถดำเนินการเก็บถาวร PHAR เป็นมาตรการรักษาความปลอดภัยได้ ตัวอย่างเช่น ส่วนขยาย ioncube
ดูเหมือนจะเข้ากันไม่ได้กับไฟล์เก็บถาวร PHAR และคุณต้องปิดการใช้งานหากคุณใช้งานอยู่ โดยการแสดงความคิดเห็นในบรรทัดต่อไปนี้จาก php.ini
ของคุณ โดยนำหน้าด้วย ;
อักขระ:
zend_extension = /path/to/ioncube_loader*.*
ส่วนขยาย suhosin
ป้องกันการดำเนินการเก็บถาวร PHAR ดังนั้นการกำหนดค่าเริ่มต้นจะต้องได้รับการแก้ไขเพื่อให้สามารถใช้ atoum โดยเพิ่มบรรทัดต่อไปนี้ในไฟล์ php.ini
ของคุณ:
suhosin.executor.include.whitelist="phar"
ท้ายที่สุด หากการรัน atoum ทำให้หน้าจอแสดงอักขระที่ดูเหมือน ???%
อาจเป็นเพราะคำสั่งของ detect_unicode
ภายในไฟล์ php.ini
ของคุณถูกตั้งค่าเป็น 1 ในการแก้ไขปัญหา คุณเพียงแค่ต้องตั้งค่าให้เป็น 0 ด้วย แก้ไขไฟล์ php.ini
ของคุณหรือโดยการรัน atoum ด้วยคำสั่งต่อไปนี้:
$ php -d detector_unicode=0 atoum.phar [ตัวเลือก]
หากการดำเนินการทั้งสามนี้ไม่อนุญาตให้ atoum ทำงาน เราขอแนะนำให้คุณส่งอีเมลไปที่ที่อยู่ support[AT]atoum(DOT)org โดยอธิบายรายละเอียดการกำหนดค่าและปัญหาของคุณ คุณยังสามารถขอความช่วยเหลือจากเจ้าหน้าที่ฝ่ายพัฒนา อะตอม ได้ในช่องสนทนาของคลังอะตอม..
__COMPILER_HALT_OFFSET__
กำหนดไว้แล้ว /path/to/atoum.phar
ข้อผิดพลาดนี้เกิดจากการที่ไฟล์เก็บถาวร atoum PHAR ถูกรวมไว้ในมากกว่าหนึ่งที่ภายในโค้ดของคุณโดยใช้ include
หรือ require
ในการแก้ไขปัญหานี้ คุณเพียงแค่ต้องรวมไฟล์เก็บถาวรโดยใช้เฉพาะ include_once
หรือ require_once
เท่านั้น เพื่อให้แน่ใจว่าไม่ได้รวมไว้หลายครั้ง
APC เป็นเฟรมเวิร์กฟรี เปิดกว้าง และมีประสิทธิภาพสำหรับการแคชและเพิ่มประสิทธิภาพโค้ดระดับกลาง PHP ที่เผยแพร่ภายใต้รูปแบบของส่วนขยาย PHP เมื่อทดสอบคลาสที่ใช้ APC คุณอาจได้รับข้อความแสดงข้อผิดพลาดที่แสดงว่าฟังก์ชัน apc_fetch
ไม่สามารถดึงค่าได้ เนื่องจากส่วนขยาย PHP ทั้งหมด APC มีตัวเลือกการกำหนดค่าบางอย่างเพื่อเปิดใช้งาน:
apc.enabled
ว่าจะเปิดหรือปิดการใช้งาน APC
apc.enable_cli
ไม่ว่าจะเปิดหรือปิดใช้งาน APC สำหรับ PHP CLI
ในการใช้ APC กับ atoum คุณต้องตั้งค่า apc.enabled
และ apc.enable_cli
เป็น 1
ไม่เช่นนั้นจะไม่เปิดใช้งานสำหรับเวอร์ชัน PHP CLI ซึ่งใช้โดย atoum
เมื่อใช้ atoum และ mocking object บางครั้งคุณจะได้รับ segfaults ที่มาจาก PHP ข้อผิดพลาดเฉพาะเหล่านี้เกิดจาก XDebug ในเวอร์ชันต่ำกว่า 2.1.0 ซึ่งมีปัญหาในการจัดการการสะท้อนในบางกรณี หากต้องการตรวจสอบเวอร์ชันปัจจุบันของ XDebug คุณสามารถเรียกใช้ php -v
ได้ เพื่อแก้ไขปัญหานี้ คุณต้องอัปเดต XDebug เป็นเวอร์ชันเสถียรล่าสุด หากคุณไม่สามารถอัปเดต XDebug บนระบบของคุณ คุณยังคงสามารถปิดใช้งานส่วนขยายได้เพื่อหลีกเลี่ยงไม่ให้เกิดข้อผิดพลาด เพื่อให้แน่ใจว่า XDebug ได้รับการอัปเดตหรือปิดใช้งานเรียบร้อยแล้ว คุณสามารถเรียกใช้ php -v
ได้ เมื่อคุณอัปเดตหรือปิดใช้งาน XDebug เสร็จแล้ว ให้รัน php atoum.phar --test-it
เพื่อให้แน่ใจว่า segfaults ทั้งหมดหายไปแล้ว และ atoum นั้นใช้งานได้
กำลังมองหาแผนงานอยู่ใช่ไหม?
นี่คืองานที่กำลังดำเนินการ,
และสิ่งที่จะเกิดขึ้นในรุ่นถัดไป
atoum ได้รับการสร้างสรรค์โดย Frédéric Hardy ขณะนี้นำโดยชุมชนผู้มีส่วนร่วมที่เข้มแข็ง คุณสามารถค้นหาได้ในรายชื่อผู้มอบหมายงานหรือในทีมผู้ร่วมให้ข้อมูล
atoum ได้รับการเผยแพร่ภายใต้ใบอนุญาต BSD-3-Clause ดูรายละเอียดในไฟล์ LICENSE ที่ให้มา