Bagaimana cara melewati tes di PHPunit?


89

Saya menggunakan phpunit sehubungan dengan jenkins, dan saya ingin melewati tes tertentu dengan mengatur konfigurasi di file XML phpunit.xml

Saya tahu bahwa saya dapat menggunakan di baris perintah:

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

bagaimana cara menerjemahkannya ke file XML karena <filters>tag hanya untuk cakupan kode?

Saya ingin menjalankan semua tes selain testStuffThatAlwaysBreaks


1
KO: bagaimana memperbaiki tes? btw, hai dari welly ;-)
zerkms

Saya tidak menulis tes, itu adalah sesuatu yang tidak relevan, dan juga tidak ingin mengubah file inti
Filype

Anda pasti bisa melakukannya. Ini adalah persyaratan yang sangat aneh
zerkms

PS: Anda menyebutkan filter - tetapi itu tidak dapat membantu Anda, karena mengecualikan semua jalur. Jika tidak <exclude>- akan melakukan pekerjaan untuk Anda
zerkms

dapatkah Anda memposting file phpunit.xml.dist yang diusulkan?
Filype

Jawaban:


170

Cara tercepat dan termudah untuk melewati pengujian yang rusak atau Anda perlu melanjutkannya nanti adalah dengan menambahkan yang berikut ini ke bagian atas pengujian unit individual Anda:

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

Anda selalu dapat menambahkan direktori atau tes ke file konfigurasi xml, namun, jika ini adalah pengontrol atau serupa itu sebenarnya tidak terlalu praktis karena Anda mungkin memiliki lusinan tes lain dalam file itu. saya kira jika Anda tidak memiliki akses ke unit test, tidak yakin saya mengerti mengapa, maka Anda tidak punya pilihan lain selain mengecualikan.
jsteinmann

6
Karena merupakan metode statis (setidaknya di PHPUnit 3), dan beberapa kelas menggunakan akhir statis mengikat afaik, Anda harus menggunakan static::markTestSkipped('');bukan $this->. Ini akan menghasilkan peringatan dalam Versi PHP yang lebih baru. Tanda tangan: public static function markTestSkipped($message = '')
Daniel W.

Membutuhkan contoh yang lebih baik dari file pengujian unit lengkap. Bukan hanya cuplikan.
Ligemer

@Bayu_joo yang phpunit resmi pengguna memiliki contoh yang menunjukkan$this->markTestSkipped()
nulll

@nulll Anda dapat melihat di kode sumber 6,5 , markTestSkipped()masih merupakan metode statis.
Daniel W.

31

Jika Anda dapat menangani mengabaikan seluruh file maka

<?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>

Inilah yang saya coba, masih dikatakan 893 tes tanpa <exclude>dan 893 tes dengan<exclude>
Filype

1
Tes membutuhkan waktu sekitar 20 menit untuk dijalankan, apakah ada cara mudah untuk melihat berapa banyak tes yang akan dijalankan? saat ini, saya harus menunggu sampai baris pertama selesai....... 63 / 893 ( 7%)
Filype

5
@Filype: Anda mungkin menentukan jalur yang salah. Ini bekerja dengan baik untuk saya. Tidak yakin apakah mungkin mendapatkan hitungan tes. PS: tes unit seharusnya tidak berjalan lama. Saya akan merekomendasikan penggunaan @groupanotasi dan tes terpisah menurut sifatnya
zerkms

21

Terkadang berguna untuk melewati semua tes dari file tertentu berdasarkan kondisi kustom yang didefinisikan sebagai kode php. Anda dapat dengan mudah melakukannya menggunakan fungsi setUp di mana makeTestSkipped berfungsi juga.

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

your_custom_condition dapat dikirimkan melalui beberapa metode / properti kelas statis, konstanta yang ditentukan dalam file bootstrap phpunit atau bahkan variabel global.


Apakah Configkelas itu? Dimana saya menempatkannya?
kroni

@cronfy dapat berupa kelas yang dapat diakses cakupan global (pola desain Singleton / Register) atau bahkan variabel global yang ditetapkan dalam file bootstrap di phpunit. Pada dasarnya logikanya adalah: if ($ testsFromThisFileShouldBeSkipped) {$ this-> markTestSkipped (...); }
Konrad Gałęzowski

hapus persyaratan dan jawaban Anda akan langsung ... "markTestSkipped di dalam penyiapan untuk melewati seluruh file"
SparK

1
@SparK Saya mengerti maksud Anda tetapi saya menyediakan cara melewatkan bersyarat dari seluruh kelas tes. Saya telah mengubahnya sedikit, menghapus cara kustom saya dalam melakukannya demi aturan umum.
Konrad Gałęzowski
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.