PHPUnit - 'Tidak ada pengujian yang dijalankan' saat menggunakan file konfigurasi

91

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 .phpekstensi. GeneralStringFunctionsTest yang dirujuk di atas sebenarnya adalah sebuah GeneralStringFunctionsTest.phpfile.

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.xmldi 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.xmlmenjaditests/GeneralStringFunctions
  • Mengubah direktori phpunit.xmlmenjadi./tests
  • Memindahkan phpunit.xmlfile ke testsdirektori dan kemudian mengubah direktori menjadi ./bukan tests.
  • Menambahkan atribut sufiks ke tag direktori di phpunit.xmluntuk menentukan "Tes" sebagai sufiks eksplisit.
Muyiwa Olu
sumber
Apakah tests/GeneralStringFunctions/GeneralStringFunctionsTestfolder atau nama file?
hek2mgl
@ hek2mgl Ini adalah nama file, sebenarnya disebut GeneralStringFunctionsTest.php. Di antarmuka baris perintah, saya tidak memasukkan .phpekstensi karena berfungsi tanpanya.
Muyiwa Olu
1
OK, maka konfigurasi Anda akan berfungsi. Btw, jika Anda menentukan sufiks, itu seharusnya Test.phpbukan Testdalam kasus Anda, tetapi bagaimanapun, Anda bebas untuk menghilangkannya karena itu Test.phpadalah nilai default.
hek2mgl
@ hek2mgl Terima kasih atas perhatiannya! Apakah Anda tahu mengapa pengujian saya tidak berjalan dengan file konfigurasi phpunit.xml?
Muyiwa Olu
Mengapa Anda tidak menunjukkan file konfigurasinya?
ThW

Jawaban:

195

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:

php artisan make:test homeTest

(yang memiliki pengujian default yang hanya menyatakan bahwa benar adalah benar)

dan melihat hasilnya

No tests executed!

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 /):

./vendor/bin/phpunit

Semoga itu bisa membantu orang lain!

RoboBear
sumber
4
Saya pikir ini kemungkinan besar adalah jawaban yang benar. Sejak itu saya menghapus proyek jadi saya tidak punya cara untuk memeriksa ulang, tetapi untuk proyek masa depan dengan komposer, saya selalu menggunakan vendor/bin/phpunitalih-alih phpunitbiner global . Saya bahkan telah menghapus phpunitbiner 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.
Muyiwa Olu
3
menelepon ./vendor/bin/phpunitmelakukan trik bagi saya pada pemasangan laravel 5.4 baru
ira
Demikian pula, ini membantu saya saat mengerjakan proyek Wordpress. Masalah yang sama: "phpunit" dapat didaftarkan secara global dan dikonfigurasi secara berbeda. Terima kasih sudah berbagi!
sqsinger
Ini memperbaikinya untuk saya, tetapi apakah ada cara untuk memperbaiki phpunit secara global? Alangkah baiknya jika saya bisa mengetikphpunit
Noitidart
2
@Noitidart Anda dapat membuat aliasuntuk ./vendor/bin/phpunit
Ganesh K
101

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!

Lionel
sumber
4
atau Anda dapat menggunakan --test-suffix=anything.phpuntuk menimpa
checksum
bagi saya itu berguna untuk mengganti jalur relatif ke folder uji dengan jalur absolut.
Timur Samkharadze
Bagaimana cara menimpa ini di file konfigurasi?
Jonathan
21

Di windows gunakan perintah berikut di terminal

.\vendor\bin\phpunit

itu kalau perintahnya

phpunit

mengembalikan "Tidak ada tes yang dijalankan!"

saat menggunakan Mac

./vendor/bin/phpunit

Semoga membantu.

Ndong Akwo
sumber
Terima kasih banyak atas jawaban Anda, ini sangat membantu.
Goke Obasa
Pastikan tidak ada phpunitdi jalur global Anda (Anda dapat memeriksanya dengan menjalankan sesuatu seperti phpunit --versiondan melihat apakah cocok dengan apa yang Anda harapkan. Xampp biasanya menginstal phpunit di direktori php bin yang sama. Itulah masalah bagi saya.
giovannipds
Saya salah satu orang yang paling bodoh di dunia dalam hal pengujian unit jadi alangkah baiknya alasan untuk ini tetapi itu sangat membantu. Terima kasih!
Mycodingproject
12

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 {...}
igors
sumber
Ah, ya, meskipun sepertinya ini bukan jawaban untuk pertanyaan asli, ini memecahkan masalah saya setelah meningkatkan ke 6.x!
Tama
Ini juga merupakan masalah bagi saya saat meningkatkan dari PHPUnit 5.7 ke 8.5 - terima kasih atas tipnya!
konfirmasi
8

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()
{
    ...
}
Brad Ahrens
sumber
1
lebih dari 2 tahun kemudian, dan ini untuk saya. format komentar benar-benar harus persis seperti itu. saya memiliki ruang yang hilang di sana. itu tidak mendeteksinya. apa yang sedikit mengganggu, di laravel 6.1 saya menggunakan perintah artisan make dan tidak termasuk komentar itu
aibarra
1
Jawaban ini berguna
Sundar
Saya mengalami masalah saat saya mengembangkan sebuah paket. Ketika saya menjalankan 'php artisan make: test SomeTest' dan memindahkannya ke direktori pengujian paket, komentar metode testExample dasar hanya berisi deskripsi dasar @return voiddan tidak berisi '@test', yang merupakan alasan phpunit tidak dapat mengidentifikasi itu sebagai ujian.
DAMIEN JIANG
6

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

CreateAdminTests

Baik

CreateAdminTest

semoga catatan ini bisa membantu seseorang

chebaby
sumber
1
Hebat, saya bisa menjalankan tes setelah itu
WindSaber
5

Anda Hanya Perlu Menyebutnya Dari File Vendor

vendor\bin\phpunit Pemberitahuan \ Tidak /

Hamza Zymawy
sumber
3

Alih-alih menjalankan phpunit

menggunakan

vendor \ bin \ phpunit

Arun Ganesan
sumber
3

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 CreateUserakan berfungsi, sedangkan penamaan CreateUserTestakan berfungsi.

Untuk mengatasi batasan, buka phpunit.xmldan ubah suffixatribut dari directoryelemen:

...
<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 .phpekstensi dari direktori. Catatan untuk menghapus cache aplikasi setelah memperbarui phpunit.xml:

php artisan config:cache

Informasi tambahan tentang konfigurasi XML PHPUnit dapat ditemukan di sini: https://phpunit.de/manual/6.5/en/appendixes.configuration.html

pengguna8555937
sumber
2

jika Anda menggunakan PHPSTORM, buka Pengaturan, lalu buka

  • Test Frameworks

    dan klik + dan pilih

  • PHPUnit Local kemudian

  • Use Composer Auto Loader lalu tempel seperti ini di bidang jalur ke skrip

  • C:\{YOUR PROJECT NAME}\vendor\autoload.php

  • klik OK

  • HAPPY TESTING

Tahseen Alaa
sumber
2

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).

Jan Polzer
sumber
1

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.

Aine
sumber
Hai, maaf jika saya tidak menjelaskan pertanyaan tersebut dengan jelas, tetapi saya menambahkan rangkaian pengujian dan nama yang sesuai ke file XML. Salinannya dapat ditemukan di sini: pastebin.com/0j0L4WBD .
Muyiwa Olu
Coba <directory> ./tests </directory>
Aine
Terima kasih atas pembaruannya, sayangnya saya masih mendapatkan masalah yang sama dengan ./tests sebagai direktori saya. Time: 28 ms, Memory: 1.50Mb No tests executed!
Muyiwa Olu
Sayangnya masalah yang sama :( 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 :(
Muyiwa Olu
Tebakan terakhir. Coba pindahkan file phpunit.xml ke dalam direktori tes /. Di dalam file tersebut, ubah direktori menjadi <directory> ./ </directory>.
Aine
1

Nama fungsi dalam file pengujian harus diawali dengan testatau 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.

Mubashar Abbas
sumber
0

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)

relipse
sumber
0

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

Codebender
sumber
0

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". :)

martinetil
sumber
0

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.

pgee70.dll
sumber
0

Punyaku agak lucu.

Ketika saya menggunakan php artisan make:testsaya tidak sengaja meletakkan .php seperti ProductRewardPointController.phpyang dibuat ProductRewardPointController.php.phpdan phpunit mengabaikannya.

Saya hanya menghapus ekstra .php dan semuanya kembali normal

Apit John Ismail
sumber
0

Saya memiliki masalah yang sama tentang Tidak ada tes yang dieksekusi! , diselesaikan dengan tetap menggunakan nama file dan nama kelas yang sama .

Seolah-olah
sumber
0

Jika Anda menggunakan IDE seperti JetBrains PHPStorm , harap perhatikan juga bahwa: di Run/Debug Configurationsjendela, Test scopeperlu disetel ke directorydan 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.pharselama Anda menyetel cakupan pengujian dan direktori dengan benar, IDE akan menangani hal-hal lain untuk Anda.

Zhwt
sumber
-2

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

mcrsftDev
sumber
Saya mencoba membuatnya bekerja dengan phpunit yang didefinisikan secara global dan akhirnya bekerja dengan cara ini, saya menggunakan MacOS dan baris perintahnya adalahphpunit --debug ./
JRod