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.