Masalah
Untuk meningkatkan kualitas kode saya, saya telah memutuskan untuk mencoba mempelajari cara menguji kode saya menggunakan Pengujian Unit alih-alih solusi pengujian saya yang biasa-biasa saja.
Saya memutuskan untuk menginstal PHPUnit menggunakan komposer untuk perpustakaan pribadi yang memungkinkan saya mencapai fungsi database umum. Awalnya saya tidak memiliki file konfigurasi untuk PHPUnit dan ketika saya menjalankan perintah seperti:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Harap dicatat bahwa ini adalah perintah terminal, jadi saya tidak menyertakan .php
ekstensi. GeneralStringFunctionsTest yang dirujuk di atas sebenarnya adalah sebuah GeneralStringFunctionsTest.php
file.
Outputnya seperti yang saya harapkan:
Waktu: 31 ms, Memori: 2.75Mb
OK (1 tes, 1 pernyataan)
Saya kemudian mencoba menggunakan file konfigurasi untuk secara otomatis memuat rangkaian pengujian daripada harus mengetikkan file secara manual setiap saat. Saya membuat file bernama phpunit.xml
di direktori root saya, dan memasukkan yang berikut ini ke dalam file: http://pastebin.com/0j0L4WBD :
<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
<testsuites>
<testsuite name="Tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Sekarang, ketika saya menjalankan perintah:
phpunit
Saya mendapatkan output berikut:
PHPUnit 4.5.0 oleh Sebastian Bergmann dan kontributor.
Konfigurasi dibaca dari /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Waktu: 16 ms, Memori: 1,50Mb
Tidak ada tes yang dijalankan!
Jika bermanfaat, struktur direktori saya adalah sebagai berikut:
src -
Tes direktori tingkat atas (dengan semua kode sumber saya) - Direktori tingkat atas (dengan semua pengujian saya, terstruktur sama dengan folder src saya )
vendor - File pihak ketiga komposer
Saya juga memiliki komposer json dan file kunci, serta file xml phpunit di tingkat atas sebagai file.
Hal-Hal yang Saya Coba
- Mengubah direktori
phpunit.xml
menjaditests/GeneralStringFunctions
- Mengubah direktori
phpunit.xml
menjadi./tests
- Memindahkan
phpunit.xml
file ketests
direktori dan kemudian mengubah direktori menjadi./
bukantests
. - Menambahkan atribut sufiks ke tag direktori di
phpunit.xml
untuk menentukan "Tes" sebagai sufiks eksplisit.
sumber
tests/GeneralStringFunctions/GeneralStringFunctionsTest
folder atau nama file?GeneralStringFunctionsTest.php
. Di antarmuka baris perintah, saya tidak memasukkan.php
ekstensi karena berfungsi tanpanya.Test.php
bukanTest
dalam kasus Anda, tetapi bagaimanapun, Anda bebas untuk menghilangkannya karena ituTest.php
adalah nilai default.phpunit.xml
?Jawaban:
Untuk apa nilainya (terlambat), saya mengalami ini baru-baru ini ketika saya membuat proyek Laravel 5.1 baru untuk situs web sederhana. Saya mencoba men-debugnya dan bingung ketika mencoba:
(yang memiliki pengujian default yang hanya menyatakan bahwa benar adalah benar)
dan melihat hasilnya
Apa masalahnya bagi saya adalah terkait dengan instalasi PHP saya - "phpunit" terdaftar secara global dan dikonfigurasi secara berbeda, sedangkan phpunit yang disertakan dengan instalasi Laravel dikonfigurasi dengan benar dan berjalan dengan sempurna.
Jadi perbaikannya adalah menjalankan phpunit yang dikonfigurasi vendor (dari direktori root yang sama dengan app / and tests /):
Semoga itu bisa membantu orang lain!
sumber
vendor/bin/phpunit
alih-alihphpunit
biner global . Saya bahkan telah menghapusphpunit
biner global jadi saya tidak sengaja membuat kesalahan yang sama lagi - dan itu belum muncul sejak itu. Saya akan menandai ini sebagai jawaban yang diterima, karena kemungkinan besar itulah alasannya../vendor/bin/phpunit
melakukan trik bagi saya pada pemasangan laravel 5.4 baruphpunit
alias
untuk./vendor/bin/phpunit
File XML Anda baik-baik saja. Namun, Anda harus memastikan bahwa file PHP di
tests/
folder Anda diberi nama sebagai berikut:test / Test.php <--- Catat huruf besar "T"
test / user Test.php
tests / fooBar Test.php
dll.
Nama file harus diakhiri dengan "Test.php" . Inilah yang dicari PHPUnit dalam direktori.
Selain itu, setiap metode pengujian harus memiliki nama yang dimulai dengan "test":
public function testFooBar() { // Your test code }
Semoga membantu!
sumber
--test-suffix=anything.php
untuk menimpaDi windows gunakan perintah berikut di terminal
itu kalau perintahnya
mengembalikan "Tidak ada tes yang dijalankan!"
saat menggunakan Mac
Semoga membantu.
sumber
phpunit
di jalur global Anda (Anda dapat memeriksanya dengan menjalankan sesuatu sepertiphpunit --version
dan melihat apakah cocok dengan apa yang Anda harapkan. Xampp biasanya menginstal phpunit di direktori php bin yang sama. Itulah masalah bagi saya.Saya memiliki masalah yang sama setelah PHPUnit di mesin virtual kami diperbarui ke versi 6. Bahkan --debug dan --verbose tidak mengatakan apa-apa yang berguna, hanya "Tidak ada pengujian yang dijalankan". Pada akhirnya ternyata kelas dan ruang nama diubah di versi baru dan hanya tidak ingin mengeksekusi file yang berisi referensi ke kelas lama. Perbaikan bagi saya hanyalah mengganti dalam setiap kasus uji ini:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
dengan:
use PHPUnit\Framework\TestCase; class MyTestCase extends TestCase {...}
sumber
Saya menyadari ini sangat tua, tetapi itu terjadi pada saya juga. Semoga ini bisa membantu seseorang.
Masalah saya adalah saya lupa simbol '@' di / ** @test * /
SALAH:
/** test */ function a_thread_can_be_deleted() { ... }
BAIK:
/** @test */ function a_thread_can_be_deleted() { ... }
sumber
@return void
dan tidak berisi '@test', yang merupakan alasan phpunit tidak dapat mengidentifikasi itu sebagai ujian.Saya menarik rambut saya selama 10 menit sebelum memutuskan untuk menggunakan --debug (cara yang baik untuk melakukannya) untuk menemukan fakta sederhana bahwa nama file tidak menghormati konvensi penamaan , saya memiliki tambahan "s" di bagian akhir .
salah
Baik
semoga catatan ini bisa membantu seseorang
sumber
Anda Hanya Perlu Menyebutnya Dari File Vendor
vendor\bin\phpunit
Pemberitahuan \ Tidak /sumber
Alih-alih menjalankan phpunit
menggunakan
vendor \ bin \ phpunit
sumber
Datang terlambat ke pesta, tetapi info ini dapat membantu orang lain.
Solusi di atas tidak berhasil untuk saya. Pada Laravel 7.x, secara default, PHPUnit hanya mengeksekusi file PHP yang memiliki akhiran "Test.php". Misalnya jika Anda membuat pengujian, penamaan tidak
CreateUser
akan berfungsi, sedangkan penamaanCreateUserTest
akan berfungsi.Untuk mengatasi batasan, buka
phpunit.xml
dan ubahsuffix
atribut daridirectory
elemen:... <testsuite name="Unit"> <!-- modify suffix --> <directory suffix=".php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <!-- modify suffix --> <directory suffix=".php">./tests/Feature</directory> </testsuite> ...
Ini akan menginstruksikan PHPUnit untuk menjalankan semua file dengan
.php
ekstensi dari direktori. Catatan untuk menghapus cache aplikasi setelah memperbaruiphpunit.xml
:Informasi tambahan tentang konfigurasi XML PHPUnit dapat ditemukan di sini: https://phpunit.de/manual/6.5/en/appendixes.configuration.html
sumber
jika Anda menggunakan PHPSTORM, buka Pengaturan, lalu buka
Test Frameworks
dan klik + dan pilih
PHPUnit Local
kemudianUse Composer Auto Loader
lalu tempel seperti ini di bidang jalur ke skripC:\{YOUR PROJECT NAME}\vendor\autoload.php
klik OK
HAPPY TESTING
sumber
Periksa file phpunit.xml , lihat di dalam testsuites.
Versi phpunit saya (2019) mencari file yang berakhiran (sufiks) * Test.php. Jadi, pastikan semua file tes diberi nama dengan benar (mis .: BookTest.php benar, BookTests.php tidak, BookTestCase.php tidak).
sumber
Sudahkah Anda menambahkan rangkaian pengujian ke file phpunit.xml Anda?
<phpunit> <testsuite name="app1" > <directory>./</directory> </testsuite> </phpunit>
Anda dapat menambahkan beberapa direktori di sana.
sumber
Time: 28 ms, Memory: 1.50Mb No tests executed!
Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!
. Ini pasti berfungsi ketika saya mereferensikannya secara manual, itu hanya tidak suka memuat dari file konfigurasi karena beberapa alasan :(Nama fungsi dalam file pengujian harus diawali dengan
test
atau harus ada komentar yang ditambahkan sebelum fungsi/** @test */
Pastikan tidak
/* @test */
karena itu tidak berhasil. harus ada dua tanda bintang setelah garis miring, bukan satu.
sumber
Bagi saya, menggunakan phpunit --debug menunjukkan kepada saya tes mana yang tidak dijalankan, di dalam, saya miliki
$this->visit('/') ->see('Laravel');
dan menurut saya karena direktori tersebut dilindungi dengan otentikasi .htaccess, ia tidak dapat membuka halaman tersebut
Solusi bagi saya adalah melakukan tes ini (atau kemungkinan besar mengambil otentikasi .htaccess)
sumber
Ini sangat terlambat tapi saya harap ini membantu seseorang.
Saya menjalankan tes saya dengan menggunakan referensi absolut. struktur folder [proyek / tes / tes.php]
baris direktori saya terlihat seperti ini ./tests/test.php
sumber
Sedikit di samping mungkin, tetapi jika Anda (seperti saya) menggunakan Laravel di Vagrant, pastikan Anda menjalankan phpunit di dalam kotak gelandangan dan bukan di "sisi jendela". :)
sumber
Saya memiliki masalah tidak ada pengujian yang dijalankan, bahkan ketika semuanya diatur dengan baik.
Penyebabnya adalah namespace bukan perintah pertama file, itu setelah beberapa komentar blok-dokumen.
mengembalikan menyebabkan phpunit melihat tes dan berjalan dengan benar.
sumber
Punyaku agak lucu.
Ketika saya menggunakan
php artisan make:test
saya tidak sengaja meletakkan .php sepertiProductRewardPointController.php
yang dibuatProductRewardPointController.php.php
dan phpunit mengabaikannya.Saya hanya menghapus ekstra .php dan semuanya kembali normal
sumber
Saya memiliki masalah yang sama tentang Tidak ada tes yang dieksekusi! , diselesaikan dengan tetap menggunakan nama file dan nama kelas yang sama .
sumber
Jika Anda menggunakan IDE seperti JetBrains PHPStorm , harap perhatikan juga bahwa: di
Run/Debug Configurations
jendela,Test scope
perlu disetel kedirectory
dan arahkan direktori itu ke tempat Andatests
folder berada.Saya hanya butuh waktu setengah jam untuk mengetahui bahwa saya lupa menyetel direktori. Anda dapat menggunakan global
phpunit.phar
selama Anda menyetel cakupan pengujian dan direktori dengan benar, IDE akan menangani hal-hal lain untuk Anda.sumber
menggunakan konsol de cmd menyelesaikan masalah ini melalui Tes jalur enterely terwujud
Saya tidak menemukan cara lain untuk melakukannya. Tidak berhasil dari cara ini
Saya harap ini membantu seseorang
sumber
phpunit --debug ./