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.

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!


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!


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.


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 {...}

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()
{
    ...
}

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


1
Hebat, saya bisa menjalankan tes setelah itu
WindSaber

5

Anda Hanya Perlu Menyebutnya Dari File Vendor

vendor\bin\phpunit Pemberitahuan \ Tidak /



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


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


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


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.


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.


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)


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


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


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.


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


0

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


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.


-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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.