versi PHP | versi atom |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X (saat ini) |
Sama seperti SimpleTest atau PHPUnit, atomum adalah kerangka pengujian unit khusus untuk bahasa PHP. Namun, ini telah dirancang sejak awal dengan pemikiran berikut:
Dapat diimplementasikan dengan cepat ,
Sederhanakan pengembangan tes,
Izinkan penulisan pengujian unit yang andal, mudah dibaca, dan jelas .
Untuk mencapai hal tersebut, ia secara besar-besaran menggunakan kemampuan yang disediakan oleh PHP , untuk memberikan pengembang cara baru dalam menulis pengujian unit. Oleh karena itu, dapat diinstal dan diintegrasikan ke dalam proyek yang sudah ada dengan sangat mudah, karena hanya merupakan satu arsip PHAR , yang merupakan satu-satunya titik masuk bagi pengembang. Selain itu, berkat antarmukanya yang lancar , ini memungkinkan penulisan pengujian unit dengan cara yang mendekati bahasa alami. Hal ini juga mempermudah penerapan stubbing dalam pengujian, berkat penggunaan fungsi dan penutupan anonim yang cerdas. atomum secara asli, dan secara default, melakukan eksekusi setiap pengujian unit dalam proses PHP terpisah, untuk menjamin isolasi . Tentu saja, ini dapat digunakan dengan lancar untuk integrasi berkelanjutan, dan mengingat desainnya, ini dapat dibuat untuk memenuhi kebutuhan spesifik dengan sangat mudah. atomum juga menyelesaikan semua ini tanpa mempengaruhi kinerja, karena telah dikembangkan untuk mengurangi jejak memori sekaligus memungkinkan eksekusi pengujian yang dipercepat. Itu juga dapat menghasilkan laporan eksekusi pengujian unit dalam format Xunit, yang membuatnya kompatibel dengan alat integrasi berkelanjutan seperti Jenkins. atomum juga menghasilkan laporan cakupan kode, untuk memungkinkan pengawasan pengujian unit. Terakhir, meskipun dikembangkan terutama pada UNIX, ia juga dapat bekerja pada Windows.
atomum sangat mudah dipasang: clone dari github, unduh PHAR-nya atau cukup gunakan composer,
atomum memberikan tingkat keamanan yang tinggi selama pelaksanaan pengujian dengan mengisolasi setiap metode pengujian dalam proses PHP-nya sendiri. Tentu saja, fitur ini tersedia langsung, tidak perlu memasang ekstensi tambahan apa pun,
atomum menjalankan pengujian dalam lingkungan paralel yang membuat suite berjalan secepat mungkin dengan memanfaatkan CPU multi-core saat ini,
atomum menyediakan serangkaian pernyataan alami dan ekspresif berfitur lengkap yang membuat pengujian mudah dibaca. Berikut ini contohnya:
<?php$ini->bilangan bulat(150) -> lebih besar dari (100) -> lebih rendah dari atau sama dengan (200) ;
atomum mendukung sintaksis mirip BDD dengan banyak kata kunci struktural:
<?php$ini->diberikan($testedInstance = kelas baru yang diuji()) ->and($testedClass[] = $firstValue = uniqid()) ->lalu->sizeof($testedInstance)->isEqualTo(1) ->string($testedClass[0])->isEqualTo($firstValue) ;
atomum menyediakan mesin tiruan yang sangat sederhana namun sangat kuat:
<?php$ini->diberikan($testedInstance = kelas baru yang diuji()) ->and($aMock = new mockfoobar()) // di sini tiruan kelas foobar dibuat secara dinamis->and($this->calling($aMock)->doOtherThing = true) // setiap panggilan ke doOtherThing( ) oleh instance akan mengembalikan true->and($testedInstance->setDependency($aMock)) ->lalu->boolean($testedInstance->doSomething())->isTrue() ->mengejek($aMengejek) ->call('doOtherThing')->withArguments($testedInstance)->once() // Menegaskan bahwa metode doOtherThing() dari $aMock dipanggil satu kali;
atomum menyediakan API yang jelas untuk menegaskan pengecualian:
<?php$ini->diberikan($testedInstance = newtestedClass()) ->and($aMock = new mockfoobar()) // di sini tiruan kelas foobar dibuat secara dinamis->and($this->calling($aMock)->doOtherThing->throw = $Exception = pengecualian baru( )) // Panggilan ke doOtherThing() akan memunculkan pengecualian->dan($testedInstance->setDependency($aMock)) ->lalu->pengecualian(fungsi() gunakan ($testedInstance) { $testedInstance->doSomething(); }) ->isIdenticalTo($pengecualian) ;
atomum juga memungkinkan Anda meniru fungsi PHP asli. Sekali lagi, ini tersedia langsung:
<?php$ini->diberikan($ini->fungsi->session_start = false) ->dan($sesi = kelas baru yang diuji()) ->lalu->pengecualian(fungsi () penggunaan ($sesi) { $sesi->mulai(); }) ->isInstanceOf('pengecualian ruangnamaproyek') ->hasMessage('Tidak dapat memulai sesi') ->fungsi('sesi_mulai')->wasCalled()->sekali() ;
atomum mampu menghasilkan beberapa laporan seperti TAP, clover, xUnit agar mudah diintegrasikan dengan Jenkins atau alat integrasi berkelanjutan lainnya,
atomum mendukung penyedia data,
tes atomum mendukung autorun: cukup sertakan atom runner dan luncurkan pengujian Anda menggunakan php path/to/test/file.php
,
File konfigurasi atomum secara eksklusif ditulis dalam PHP (tanpa XML, YAML, atau format lainnya) sehingga memberi Anda fleksibilitas terbaik:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = atoumatoumtestgenerator();$ baru testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); ->setTestedClassNamespace('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$pelari->setTestGenerator($testGenerator);
atomum menyediakan generator template pengujian otomatis,
atomum menyediakan mode loop untuk dengan mudah memicu kembali pengujian yang gagal,
atomum penuh dengan fitur menarik lainnya yang akan Anda temukan seiring berjalannya waktu.
atomum benar-benar membutuhkan PHP >= 5.6.0
atau lebih baru agar dapat berfungsi. Di UNIX, untuk memeriksa apakah Anda memiliki versi PHP yang benar, Anda hanya perlu menjalankan perintah berikut di terminal Anda:
$php -v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
Jika PHP 5.6.x
atau yang setara ditampilkan, maka Anda telah menginstal versi PHP yang tepat. Jika Anda ingin menggunakan atomum menggunakan arsip PHAR-nya, Anda juga memerlukan PHP untuk dapat mengakses modul phar
, yang biasanya tersedia secara default. Di UNIX, untuk memeriksa apakah Anda memiliki modul ini atau tidak, Anda hanya perlu menjalankan perintah berikut di terminal Anda:
$php -m | grep -i far
Jika Phar
atau yang setara ditampilkan, berarti modul telah terpasang dengan benar. Menghasilkan laporan dalam format Xunit memerlukan modul xml
. Di UNIX, untuk memeriksa apakah Anda memiliki modul ini atau tidak, Anda hanya perlu menjalankan perintah berikut di terminal Anda:
$php -m | grep -i xml
Jika Xml
atau yang setara ditampilkan, maka modul telah terpasang dengan benar. Jika Anda ingin memantau tingkat cakupan kode Anda dengan pengujian unit, modul Xdebug 2.3 akan diperlukan. Di UNIX, untuk memeriksa apakah Anda memiliki modul ini atau tidak, Anda hanya perlu menjalankan perintah berikut di terminal Anda:
$php -v | grep -oi 'xdebug'
Jika Xdebug
atau yang setara ditampilkan, maka modul telah terpasang dengan benar.
Anda hanya perlu mengunduh arsip PHAR-nya dan menyimpannya di tempat yang Anda inginkan, misalnya di bawah /path/to/project/tests/atoum.phar
. Arsip PHAR ini berisi versi pengembangan terbaru untuk lulus totalitas pengujian unit Atomum . Kode sumber atomum juga tersedia melalui repositori GitHub. Untuk memeriksa apakah atomum berfungsi dengan benar dengan konfigurasi Anda, Anda dapat menjalankan semua pengujian unitnya. Untuk melakukan itu, Anda hanya perlu menjalankan perintah berikut di terminal Anda:
$ php atomum.phar --uji-itu
Menggunakan editor teks pilihan Anda, buat file path/to/project/tests/units/helloWorld.php
dan tambahkan kode berikut:
<?phpnamespace vendorprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use vendorproject;class helloWorld extends atoumtest {fungsi publik testSay() {$helloWorld = proyek baruhelloWorld();$this->string($helloWorld->say())->isEqualTo('Halo Dunia!'); } }
Luncurkan terminal Anda dan jalankan perintah berikut:
$ jalur php/ke/tes/file[masukkan]
Anda harus mendapatkan hasil berikut atau sesuatu yang setara:
> atom versi XXX oleh Frédéric Hardy. Kesalahan: Pengecualian tanpa pengawasan: Kelas yang diuji 'vendorprojecthelloWorld' tidak ada untuk kelas pengujian 'vendorprojecttestsunitshelloWorld'
Menggunakan lagi editor teks pilihan Anda, buat file path/to/project/classes/helloWorld.php
dan tambahkan kode berikut:
<?phpnamespace vendorproject;kelas helloWorld {kata fungsi publik() {kembalikan 'Halo Dunia!'; } }
Di terminal yang sama, jalankan perintah berikut sekali lagi:
$ jalur php/ke/tes/file[masukkan]
Anda harus mendapatkan hasil berikut, atau sesuatu yang setara:
> atomum versi 288 oleh Frédéric Hardy.> Jalankan vendorprojecttestsunitshelloWorld... [S_______________________________________________] [1/1] => Durasi tes: 0,00 detik. => Penggunaan memori: 0,25 Mb.> Total durasi pengujian: 0,00 detik.> Total penggunaan memori pengujian: 0,25 Mb.> Nilai cakupan kode: 100,00%> Durasi berjalan: 0,08 detik.> Berhasil (1 tes, 1 metode, 2 pernyataan , 0 kesalahan, 0 pengecualian)!
<?phpnamespace vendorprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use vendorproject;class helloWorld extends atoumtest {uji fungsi publik__konstruksi() {$helloWorld = proyek baruhelloWorld();$this->string($helloWorld->say())->isEqualTo('Halo!') ->string($helloWorld->say($name = 'Frédéric Hardy'))->isEqualTo('Halo ' . $name . '!') ; } }
Dokumentasi atomum masih ditulis. Bantuan apa pun untuk memperbaikinya akan dihargai. Namun, jika Anda ingin segera mengeksplorasi lebih jauh kemungkinan-kemungkinan yang dimiliki Atomum , kami merekomendasikan:
Berjalan di terminal Anda, baik perintah php atoum.phar -h
, atau perintah php scripts/runner.php -h
,
Menjelajahi isi direktori configurations
di sumber atomum , karena berisi contoh file konfigurasi,
Menjelajahi isi direktori tests/unit/classes
di sumber atomum , karena berisi semua pengujian unit,
Baca slide konferensi (Prancis) tentang hal itu, tersedia online,
Baca wiki (perancis),
Bergabunglah dengan saluran diskusi,
Ajukan pertanyaan melalui email di alamat support[AT]atoum(DOT)org .
Dalam hal ini, hal pertama yang ingin Anda lakukan adalah mengonfirmasi apakah Anda memiliki arsip versi terbaru. Anda hanya perlu mendownloadnya lagi. Jika masih tidak berhasil, jalankan perintah berikut di jendela terminal:
$php -n atomum.phar -v
Jika Anda mendapatkan nomor versi atomum , maka masalahnya berasal dari konfigurasi PHP Anda. Dalam kebanyakan kasus, penyebabnya mungkin ada pada ekstensi, yang mungkin tidak kompatibel dengan format PHAR, atau yang menghalangi pelaksanaan arsip PHAR sebagai tindakan keamanan. Ekstensi ioncube
misalnya tampaknya tidak kompatibel dengan arsip PHAR, dan oleh karena itu, Anda harus menonaktifkannya jika Anda menggunakannya, dengan mengomentari baris berikut dari php.ini
Anda, dengan mengawalinya dengan ;
karakter:
zend_extension = /path/to/ioncube_loader*.*
Ekstensi suhosin
mencegah eksekusi arsip PHAR, oleh karena itu konfigurasi defaultnya harus diubah agar dapat menggunakan atomum , dengan menambahkan baris berikut di file php.ini
Anda:
suhosin.executor.include.whitelist="phar"
Terakhir, jika menjalankan atomum menyebabkan layar menampilkan karakter seperti ???%
, ini karena direktif detect_unicode
di dalam file php.ini
Anda disetel ke 1. Untuk memperbaiki masalah, Anda hanya perlu menyetelnya ke 0 dengan mengedit file php.ini
Anda atau dengan menjalankan atomum dengan perintah berikut:
$ php -d deteksi_unicode=0 atom.phar [pilihan]
Jika ketiga operasi ini tidak memungkinkan atomum berfungsi, kami sarankan Anda mengirim email ke alamat support[AT]atoum(DOT)org , menjelaskan secara rinci konfigurasi dan masalah Anda. Anda juga dapat meminta bantuan dari staf pengembangan atomum di saluran diskusi repositori atom..
__COMPILER_HALT_OFFSET__
sudah ditentukan /path/to/atoum.phar
Kesalahan ini berasal dari fakta bahwa arsip atomum PHAR disertakan di lebih dari satu tempat dalam kode Anda menggunakan include
atau require
. Untuk memperbaiki masalah ini, Anda hanya perlu menyertakan arsip dengan menggunakan include_once
atau require_once
saja, untuk memastikan arsip tidak disertakan beberapa kali.
APC adalah kerangka kerja gratis, terbuka, dan kuat untuk menyimpan cache dan mengoptimalkan kode perantara PHP yang didistribusikan dalam bentuk ekstensi PHP. Saat menguji kelas yang menggunakan APC, Anda mungkin mendapatkan pesan kegagalan yang menunjukkan bahwa fungsi apc_fetch
tidak dapat mengambil nilai. Seperti semua ekstensi PHP, APC memiliki beberapa opsi konfigurasi untuk mengaktifkannya:
apc.enabled
apakah akan mengaktifkan atau menonaktifkan APC,
apc.enable_cli
, apakah akan mengaktifkan atau menonaktifkan APC untuk PHP CLI.
Untuk menggunakan APC dengan atomum , Anda harus menyetel apc.enabled
dan apc.enable_cli
ke 1
, jika tidak, versi PHP CLI yang digunakan oleh atomum tidak akan diaktifkan.
Saat menggunakan atom dan objek tiruan, terkadang Anda akan mendapatkan segfault yang berasal dari PHP. Segfault ini disebabkan oleh XDebug dalam versi kurang dari 2.1.0 yang memiliki refleksi penanganan masalah dalam beberapa kasus. Untuk memeriksa versi XDebug saat ini, Anda dapat menjalankan php -v
. Untuk memperbaiki masalah ini, Anda harus memperbarui XDebug ke versi stabil terbaru. Jika Anda tidak dapat memperbarui XDebug di sistem Anda, Anda masih dapat menonaktifkan ekstensi untuk menghindari kesalahan segfault. Untuk memastikan XDebug berhasil diupdate atau dinonaktifkan, Anda dapat menjalankan php -v
. Ketika Anda selesai memperbarui atau menonaktifkan XDebug, jalankan php atoum.phar --test-it
untuk memastikan bahwa semua segfault telah hilang dan atom tersebut berfungsi.
Mencari peta jalan?
Inilah pekerjaan yang sedang berlangsung,
Dan itulah yang akan terjadi pada rilis berikutnya.
atom telah dibuat oleh Frédéric Hardy. Sekarang dipimpin oleh komunitas kontributor yang kuat. Anda dapat menemukannya di daftar pengimplementasi atau di tim Kontributor.
atom dirilis di bawah Lisensi Klausul BSD-3. Lihat file LISENSI yang dibundel untuk detailnya.