PHPUnit - Yapılandırma dosyası kullanılırken 'Hiçbir test yürütülmedi'


91

Sorun

Kod kalitemi artırmak için, en iyi ihtimalle vasat test çözümlerim yerine, Kodumu Birim Testi kullanarak nasıl test edeceğimi öğrenmeye karar verdim.

Ortak veritabanı işlevlerini elde etmeme olanak tanıyan kişisel bir kitaplık için besteci kullanarak PHPUnit'i kurmaya karar verdim. İlk başta PHPUnit için bir yapılandırma dosyam yoktu ve aşağıdaki gibi komutları çalıştırdığımda:

$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

Lütfen bunun bir terminal komutu olduğunu unutmayın, bu yüzden .phpuzantıyı eklemedim . Yukarıda atıfta bulunulan GeneralStringFunctionsTest aslında bir GeneralStringFunctionsTest.phpdosyadır.

Çıktı beklediğim gibi:

Zaman: 31 ms, Hafıza: 2.75Mb

Tamam (1 test, 1 onay)

Ardından, her seferinde dosyayı manuel olarak yazmak zorunda kalmadan, test paketini otomatik olarak yüklemek için bir yapılandırma dosyası kullanmayı denedim. phpunit.xmlKök dizinimde adlı bir dosya oluşturdum ve şu dosyaya şunu girdim: http://pastebin.com/0j0L4WBD :

<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Tests">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

Şimdi, komutu çalıştırdığımda:

phpunit

Aşağıdaki çıktıyı alıyorum:

Sebastian Bergmann ve katkıda bulunanlar tarafından PHPUnit 4.5.0.

/Users/muyiwa/Projects/DatabaseHelper/phpunit.xml'den okunan yapılandırma

Zaman: 16 ms, Hafıza: 1.50Mb

Test yapılmadı!

Yardımcı olması durumunda, dizin yapım şu şekildedir:
src - Üst düzey dizin (tüm kaynak kodumla birlikte)
testleri - Üst düzey dizin (tüm testlerimle, src klasörümle aynı şekilde yapılandırılmış )
satıcı - Composer üçüncü taraf dosyaları

Ayrıca composer json ve lock dosyamın yanı sıra phpunit xml dosyası dosya olarak en üst seviyede var.

Denediğim şeyler

  • Dizini olarak phpunit.xmldeğiştirmetests/GeneralStringFunctions
  • Dizini olarak phpunit.xmldeğiştirme./tests
  • phpunit.xmlDosyayı testsdizine taşımak ve ardından dizini ./yerine olacak şekilde değiştirmek tests.
  • phpunit.xml"Testler" i açık son ek olarak belirtmek için dizin etiketine bir sonek niteliği ekleme .

tests/GeneralStringFunctions/GeneralStringFunctionsTestBir klasör mü yoksa dosya adı mı?
hek2mgl

@ hek2mgl Bir dosya adıdır, aslında denir GeneralStringFunctionsTest.php. Komut satırı arayüzünde .phpuzantıya girmedim çünkü onsuz çalıştı.
Muyiwa Olu

1
Tamam, o zaman konfigürasyonunuz çalışmalıdır. Btw, eğer bir son ek belirtirseniz , sizin durumunuzdan Test.phpziyade olmalıdır Test, ancak bununla birlikte, Test.phpvarsayılan değer olduğu için bunu atlamakta özgürsünüz .
hek2mgl

@ hek2mgl Uyarılar için teşekkürler! Testimin neden yapılandırma dosyasıyla çalışmadığına dair bir fikriniz var phpunit.xmlmı?
Muyiwa Olu

Neden bize yapılandırma dosyasını göstermiyorsun?
Thw

Yanıtlar:


196

Değeri ne olursa olsun (geç kalmak), son zamanlarda basit bir web sitesi için yeni bir Laravel 5.1 projesi yaparken karşılaştım. Hata ayıklamaya çalıştım ve denediğimde kafam karıştı:

php artisan make:test homeTest

(sadece doğrunun doğru olduğunu iddia eden varsayılan bir teste sahiptir)

ve çıktıyı gördüm

No tests executed!

Benim için sonuçta ortaya çıkan sorun PHP kurulumumla ilgiliydi - "phpunit" global olarak kaydedildi ve farklı şekilde yapılandırıldı, oysa Laravel kurulumuyla gelen phpunit tam olarak yapılandırıldı ve mükemmel çalıştı.

Dolayısıyla, düzeltme satıcının yapılandırılmış phpunit'ini çalıştırıyor (app / ve testler / ile aynı kök dizinden):

./vendor/bin/phpunit

Umarım bu başka birine yardımcı olur!


4
Sanırım bu büyük olasılıkla doğru cevap. O zamandan beri projeyi kaldırdım, bu yüzden tekrar kontrol etmenin bir yolu yok, ancak besteci ile gelecekteki projeler için her zaman vendor/bin/phpunitküresel phpunitikili yerine kullandım . Hatta küresel phpunitikiliyi kaldıracak kadar ileri gittim, bu yüzden yanlışlıkla aynı hatayı tekrar yapmam - ve o zamandan beri ortaya çıkmadı. Nedeni büyük olasılıkla bu olduğundan, bunu kabul edilen cevap olarak işaretleyeceğim.
Muyiwa Olu

3
çağıran ./vendor/bin/phpunittaze laravel 5.4 benim için hile yaptı yüklemek
ira

Benzer şekilde, bu da bir Wordpress projesi üzerinde çalışırken bana yardımcı oldu. Aynı sorun: "phpunit" global olarak kaydedilebilir ve farklı şekilde yapılandırılabilir. Paylaşım için teşekkürler!
sqsinger

Bu benim için düzeltti, ancak phpunit'i global olarak düzeltmenin bir yolu var mı? Sadece yazabilirsem iyi olurphpunit
Noitidart

2
@Noitidart aliasiçin oluşturabilirsin./vendor/bin/phpunit
Ganesh K

101

XML dosyanız olduğu gibi iyi durumda. Ancak, tests/klasörünüzdeki PHP dosyalarının aşağıdaki gibi adlandırıldığından emin olmalısınız :

testler / Test.php <--- Büyük "T"
testleri / kullanıcı Test.php
testleri / fooBar Test.php
vb.

Dosya adları "Test.php" ile bitmelidir . PHPUnit'in dizinlerde aradığı şey budur.

Ayrıca, her test yönteminin "test" ile başlayan bir adı olmalıdır:

public function testFooBar()
{
    // Your test code
}

Umarım yardımcı olur!


4
veya --test-suffix=anything.phpgeçersiz kılmak için kullanabilirsiniz
sağlama toplamı

benim için test klasörünün göreli yolunu mutlak yolla değiştirmek faydalı oldu.
Timur Samkharadze

Yapılandırma dosyasında bunu nasıl geçersiz kılabilirim?
Jonathan

21

Windows'ta terminalde aşağıdaki komutu kullanın

.\vendor\bin\phpunit

bu komut ise

phpunit

"Yürütülen test yok!"

Mac'teyken

./vendor/bin/phpunit

Umarım yardımcı olur.


Cevabınız için çok teşekkürler, bu gerçekten yardımcı oluyor.
Goke Obasa

phpunitKüresel yolunuzda hiçbir şey olmadığından emin olun (bunun gibi bir şey çalıştırdığını kontrol edebilir phpunit --versionve beklediğinizle eşleşip eşleşmediğini görebilirsiniz. Xampp genellikle aynı php bin dizinine bir phpunit yükler. Benim için sorun buydu.
giovannipds

Ünite testi söz konusu olduğunda dünyadaki en cahil insanlardan biriyim, bu yüzden bunun nedeni güzel olurdu ama gerçekten yardımcı oldu. Yine de teşekkürler!
Mycodingproject

12

Sanal makinelerimizdeki PHPUnit sürüm 6'ya güncellendikten sonra da aynı sorunu yaşadım. Hatta --debug ve --verbose yararlı hiçbir şey söylemedi, sadece "Test yürütülmedi". Sonunda, yeni sürümde sınıfların ve ad alanlarının değiştirildiği ve eski sınıflara referanslar içeren dosyaları yürütmek istemediği ortaya çıktı. Benim için düzeltme, her test durumunda şunu değiştirmekti:

class MyTestCase extends \PHPUnit_Framework_TestCase {...}

ile:

use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase {...}

Ah, evet, orijinal sorunun cevabı bu gibi görünmese de 6.x'e yükselttikten sonra sorunumu çözdü!
Tama

Bu benim için PHPUnit 5.7'den 8.5'e yükseltme yaparken sorun oldu - ipucu için teşekkürler!
onaylayıcı

8

Bunun çok eski olduğunun farkındayım, ama bana da oldu. Umarım bu birine yardımcı olur.

Benim sorunum, / ** @test * / içindeki '@' sembolünü unutmamdı.

YANLIŞ:

/** test */
function a_thread_can_be_deleted()
{
    ...
}

SAĞ:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}

1
2 yıldan fazla bir süre sonra ve bu benim için buydu. yorum için gerçekten tam olarak bu formatta olması gerekir. orada eksik bir yerim vardı. onu tespit etmedi. biraz can sıkıcı ne var, Laravel 6.1'de zanaatkar yapma komutunu kullandım ve bu yorumu içermiyor
aibarra

1
Bu cevap yararlıdır
Pazar,

Bir paket geliştirirken sorunla karşılaştım. 'Php artisan make: test SomeTest' komutunu çalıştırdığımda ve onu paket testleri dizinine taşıdığımda, temel testExample yönteminin yorumu sadece temel bir açıklama içeriyor ve phpunit'in tanımlayamama @return voidnedeni olan '@test' içermiyor bir test olarak.
DAMIEN JIANG

6

Dosya adının adlandırma kuralına uymadığı gerçeğini keşfetmek için --debug (bu arada gitmenin iyi bir yolu) kullanmaya karar vermeden önce saçımı 10 dakika boyunca çektim , sonunda fazladan bir "s" vardı .

yanlış

CreateAdminTests

sağ

CreateAdminTest

umarım bu not birine yardımcı olabilir


1
Harika, ondan sonra test yapabildim
WindSaber

5

Satıcı Dosyasından Aramanız Gerekiyor

vendor\bin\phpunit Uyarı \ Değil /



3

Partiye geç geldi, ancak bu bilgi başkalarına yardımcı olabilir.

Yukarıdaki çözümler benim için işe yaramadı. Laravel 7.x'ten itibaren, varsayılan olarak, PHPUnit yalnızca "Test.php" ile son eklenmiş PHP dosyalarını çalıştırır. Örneğin, bir test oluşturursanız, adlandırmak CreateUserişe yaramazken,CreateUserTest çalışacaktır.

Sınırlamanın üstesinden gelmek için, öğelere gidin phpunit.xmlve suffixnitelikleri değiştirin directory:

...
<testsuite name="Unit">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Unit</directory>

</testsuite>
<testsuite name="Feature">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Feature</directory>

</testsuite>
...

Bu, PHPUnit'e, .phpuzantıya sahip tüm dosyaları dizinlerden çalıştırma talimatı verecektir . Güncellemeden sonra uygulamanın önbelleğini temizlemek için not phpunit.xml:

php artisan config:cache

PHPUnit XML yapılandırması hakkında ek bilgi burada bulunabilir: https://phpunit.de/manual/6.5/en/appendixes.configuration.html


2

PHPSTORM kullanıyorsanız Ayarlar'a gidin ve ardından gidin

  • Test Frameworks

    + tıklayın ve seçin

  • PHPUnit Local sonra

  • Use Composer Auto Loader sonra bunu komut dosyası alanının yoluna yapıştırın

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

  • Tamam'ı tıklayın

  • HAPPY TESTING


2

Phpunit.xml dosyasını kontrol edin, test araçlarının içine bakın.

Phpunit (2019) sürümüm, * Test.php ile biten (sonek) dosyaları arıyor. Bu nedenle, tüm test dosyalarının doğru adlandırıldığından emin olun (örn .: BookTest.php doğru, BookTests.php değil, BookTestCase.php değil).


1

Phpunit.xml dosyanıza bir test paketi eklediniz mi?

<phpunit>
    <testsuite name="app1" >
        <directory>./</directory>
    </testsuite>
</phpunit>

Oraya birden fazla dizin ekleyebilirsiniz.


Merhaba, soruyu açıklığa kavuşturmadıysam özür dilerim, ancak XML dosyasına bir test paketi ve karşılık gelen adı ekledim. Bir kopyası burada bulunabilir: pastebin.com/0j0L4WBD .
Muyiwa Olu

<directory> ./tests </directory> ’ı deneyin
Aine

Güncelleme için teşekkürler, maalesef dizinimdeki ./tests ile aynı sorunu yaşıyorum . Time: 28 ms, Memory: 1.50Mb No tests executed!
Muyiwa Olu

Maalesef aynı sorun :( Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!. Manuel olarak referans verdiğimde kesinlikle çalışıyor, sadece bazı nedenlerden dolayı yapılandırma dosyasından yüklemeyi sevmiyor :(
Muyiwa Olu

Son tahmin. Phpunit.xml dosyasını testler / dizinine taşımayı deneyin. Dosyada, dizini <directory> ./ </directory> olarak değiştirin.
Aine

1

Test dosyasındaki işlev adlarının önünde testveya öneki olmalıdır veya işlevden önce bir açıklama eklenmelidir.

/** @test */

Olmadığından emin olun

/* @test */

çünkü bu işe yaramıyor. bölü çizgisinden sonra bir değil iki yıldız olması gerekir.


0

Benim için phpunit --debug kullanmak bana hangi testi çalıştırmadığını gösterdi, içeride

$this->visit('/')
         ->see('Laravel');

ve bence dizin .htaccess kimlik doğrulaması ile korunduğu için sayfayı ziyaret edemedi

Benim için çözüm, bu testi yapmaktı (veya büyük olasılıkla .htaccess kimlik doğrulamasını çıkarmaktı)


0

Bu çok geç ama umarım birine yardımcı olur.

Testlerimi mutlak bir referans kullanarak çalıştırdım. klasör yapısı [proje / testler / test.php]

benim dizin satırım şöyle görünüyordu ./tests/test.php


0

Biraz yan tarafta olabilir, ancak (benim gibi) Laravel'i Vagrant'ta kullanıyorsanız, phpunit'i serseri kutusunun içinde çalıştırdığınızdan ve "pencere tarafında" çalıştırmadığınızdan emin olun. :)


0

İşler iyi ayarlanmış olsa bile hiçbir testin yürütülmemesi sorunum vardı.

Nedeni, ad alanının dosyanın ilk komutu olmamasıydı, bazı doc-blok yorumlarından sonraydı.

geri dönüş, phpunit'in testleri görmesine ve düzgün çalışmasına neden oldu.


0

Benimki biraz komikti.

Kullandığımda php artisan make:testyanlışlıkla .php gibi ProductRewardPointController.phpoluşturulan ProductRewardPointController.php.phpve phpunit gibi. onu yok saydı.

Sadece fazladan .php'yi siliyorum ve her şeyi normale döndürüyorum


0

Ben de aynı sayıda Test yapılmadı! , aynı dosya adı ve sınıf adı korunarak çözüldü .


0

JetBrains PHPStorm gibi IDE'ler kullanıyorsanız , lütfen şunlara da dikkat edin: Run/Debug Configurationspencerede, bu dizinin Test scopeayarlanması directoryvetests klasörünüzün bulunduğu .

Dizini ayarlamayı unuttuğumu anlamam yarım saatimi aldı. phpunit.pharTest kapsamını ve dizini doğru bir şekilde ayarladığınız sürece global kullanabilirsiniz , IDE sizin için diğer şeyleri halleder.


-2

de cmd konsolunun kullanılması bu sorunu çözdü, giriş yolu testini geçerek gerçekleştirildi

Bunu yapmanın başka bir yolunu bulamadım Bu şekilde çalışmıyor

Umarım bu birisi için yararlı olmuştur


Phpunit tanımlı global ile çalışmasını sağlamaya çalışıyordum ve sonunda bu şekilde çalışıyordum, MacOS kullanıyorum ve komut satırıphpunit --debug ./
JRod
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.