PHPunit'te testler nasıl atlanır?


89

Jenkins ile bağlantılı olarak phpunit kullanıyorum ve XML dosyasındaki yapılandırmayı ayarlayarak belirli testleri atlamak istiyorum phpunit.xml

Komut satırında kullanabileceğimi biliyorum:

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

<filters>etiket yalnızca kod kapsamı için olduğundan bunu XML dosyasına nasıl çevirebilirim ?

Dışındaki tüm testleri çalıştırmak istiyorum testStuffThatAlwaysBreaks


1
KO: testi düzeltmeye ne dersiniz? btw,
welly'den

Testleri ben yazmadım, bu alakasız bir şey ve ayrıca çekirdek dosyaları değiştirmek de istemiyorum
Filype

Şüphesiz bunu yapabilirsiniz. Bu çok garip bir gereklilik
zerkms

Not: Filtrelerden bahsettiniz - ancak size yardımcı olamadı çünkü tüm yolları dışlıyor. Aksi takdirde <exclude>- işi sizin için
yapardı

önerilen phpunit.xml.dist dosyasını gönderebilir misin?
2012'de

Yanıtlar:


170

Bozulmuş veya daha sonra üzerinde çalışmaya devam etmeniz gereken testleri atlamanın en hızlı ve kolay yolu, aşağıdakileri bireysel birim testinizin en üstüne eklemektir:

$this->markTestSkipped('must be revisited.');

xml yapılandırma dosyasına her zaman dizinler veya testler ekleyebilirsiniz, ancak bu bir denetleyici veya benzeri ise bu gerçekten pratik değildir çünkü muhtemelen o dosyada düzinelerce başka testiniz vardır. Sanırım birim testlerine erişiminiz yoksa, nedenini anladığımdan emin değilim, o zaman dışlamaktan başka seçeneğiniz yoktur.
jsteinmann

6
Statik bir yöntem olduğu için (en azından PHPUnit 3'te) ve bazı sınıflar geç statik bağlama afaik kullandığından, static::markTestSkipped('');yerine kullanmalısınız $this->. Yeni PHP Sürümlerinde bir uyarı oluşturacaktır. İmza: public static function markTestSkipped($message = '')
Daniel W.

Tam birim test dosyasının daha iyi bir örneğine ihtiyaç duyar. Sadece bir parça değil.
Ligemer 05

@DanielW. Resmi PHPUnit manuel gösteren örnekler vardır$this->markTestSkipped()
nulll

Gördüğünüz @nulll 6.5 kaynak kodundaki , markTestSkipped()hala statik bir yöntemdir.
Daniel W.

31

Dosyanın tamamını görmezden gelmekle başa çıkabiliyorsanız

<?xml version="1.0" encoding="UTF-8"?>

<phpunit>

    <testsuites>
        <testsuite name="foo">
            <directory>./tests/</directory>
            <exclude>./tests/path/to/excluded/test.php</exclude>
                ^-------------
        </testsuite>
    </testsuites>

</phpunit>

Denediğim şey buydu, yine de yazıyor 893 test olmadan <exclude>ve 893 test<exclude>
Filype

1
Testlerin çalıştırılması yaklaşık 20 dakika sürüyor, kaç tane test yapacağını görmenin kolay bir yolu var mı? şu anda, ilk satır tamamlanana kadar beklemem gerekiyor....... 63 / 893 ( 7%)
Filype

5
@Filype: o zaman muhtemelen yanlış yolu belirttiniz. Benim için iyi çalışıyor. Test sayısını almanın mümkün olup olmadığından emin değilim. Not: birim testleri çok uzun sürmemelidir. Ben kullanarak tavsiye ediyoruz @groupdoğası gereği açıklama ve split testleri
zerkms

21

Bazen, php kodu olarak tanımlanan özel koşullara göre belirli bir dosyadaki tüm testleri atlamak yararlıdır. Bunu makeTestSkipped'in de çalıştığı setUp işlevini kullanarak kolayca yapabilirsiniz.

protected function setUp()
{
    if (your_custom_condition) {
        $this->markTestSkipped('all tests in this file are invactive for this server configuration!');
    }
}

your_custom_condition bazı statik sınıf yöntemi / özelliği, phpunit önyükleme dosyasında tanımlanan bir sabit veya hatta genel bir değişken aracılığıyla geçirilebilir.


Bir nedir Configsınıf? Nereye yerleştiririm?
cronfy

@cronfy, herhangi bir global kapsam erişilebilir sınıf (Singleton / Register tasarım modeli) veya phpunit'te önyükleme dosyasındaki global değişken seti olabilir. Temel olarak mantık şudur: if ($ testFromThisFileShouldBeSkipped) {$ this-> markTestSkipped (...); }
Konrad Gałęzowski

koşulu kaldırın ve cevabınız basit olacaktır ... "tüm dosyayı atlamak için kurulum içinde markTestSkipped"
SparK

1
@SparK Demek istediğini anlıyorum ama tüm test dersinin şartlı atlama yolunu sunuyordum . Bunu biraz değiştirdim, genel kural lehine kendi özel yöntemimi kaldırdım.
Konrad Gałęzowski
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.