Bagaimana cara menguji metode konkret dari kelas abstrak dengan PHPUnit?
Saya berharap bahwa saya harus membuat semacam objek sebagai bagian dari tes. Padahal, saya tidak tahu praktik terbaik untuk ini atau jika PHPUnit memungkinkan untuk ini.
Bagaimana cara menguji metode konkret dari kelas abstrak dengan PHPUnit?
Saya berharap bahwa saya harus membuat semacam objek sebagai bagian dari tes. Padahal, saya tidak tahu praktik terbaik untuk ini atau jika PHPUnit memungkinkan untuk ini.
Jawaban:
Unit testing kelas abstrak tidak perlu berarti menguji antarmuka, karena kelas abstrak dapat memiliki metode konkret, dan metode konkret ini dapat diuji.
Tidak jarang, ketika menulis beberapa kode pustaka, memiliki kelas dasar tertentu yang Anda harapkan untuk diperluas di lapisan aplikasi Anda. Dan jika Anda ingin memastikan bahwa kode perpustakaan diuji, Anda perlu sarana untuk UT metode konkret kelas abstrak.
Secara pribadi, saya menggunakan PHPUnit, dan itu disebut bertopik dan benda tiruan untuk membantu Anda menguji hal-hal semacam ini.
Langsung dari manual PHPUnit :
Objek tiruan memberi Anda beberapa hal:
sumber
Itu pertanyaan yang bagus. Saya sudah mencari ini juga.
Untungnya, PHPUnit sudah memiliki
getMockForAbstractClass()
metode untuk kasus ini, misalnyaPenting:
Perhatikan bahwa ini membutuhkan PHPUnit> 3.5.4. Ada bug di versi sebelumnya.
Untuk meningkatkan ke versi terbaru:
sumber
Perlu dicatat bahwa dukungan PHP 7 untuk kelas anonim telah ditambahkan. Ini memberi Anda jalan tambahan untuk menyiapkan tes untuk kelas abstrak, yang tidak bergantung pada fungsionalitas spesifik PHPUnit.
sumber
Eran, metode Anda harus bekerja, tetapi itu bertentangan dengan kecenderungan menulis tes sebelum kode aktual.
Apa yang saya sarankan adalah menulis tes Anda pada fungsionalitas yang diinginkan dari subkelas non-abstrak dari kelas abstrak yang dimaksud, kemudian menulis baik kelas abstrak dan subkelas pelaksana, dan akhirnya menjalankan tes.
Tes Anda jelas harus menguji metode yang didefinisikan dari kelas abstrak, tetapi selalu melalui subkelas.
sumber
Jawaban Nelson salah.
Kelas abstrak tidak mengharuskan semua metode mereka abstrak.
Metode yang diterapkan adalah yang perlu kita uji.
Apa yang dapat Anda lakukan adalah membuat kelas rintisan palsu pada file unit test, minta itu memperluas kelas abstrak dan hanya menerapkan apa yang diperlukan tanpa fungsi sama sekali, tentu saja, dan mengujinya.
Bersulang.
sumber
Jika Anda tidak ingin subkelas kelas abstrak hanya untuk melakukan tes unit pada metode yang sudah diterapkan dalam kelas abstrak, Anda bisa mencoba melihat apakah kerangka kerja Anda memungkinkan Anda untuk mengejek kelas abstrak.
sumber