Apa cara terbaik untuk menguji unit kode Objective-C?


330

Kerangka apa yang ada untuk unit test kode Objective-C? Saya ingin kerangka kerja yang terintegrasi dengan baik dengan Apple Xcode.


Sepengetahuan saya, beberapa jawaban di sini sudah usang. Apple sekarang memiliki XCTest, yang membantu Anda mengatasi masalah ini. Saya pikir sebagian besar jawaban perlu diperbarui.
Sayang

Jawaban:


317

Xcode mencakup XCTest, yang mirip dengan OCUnit , kerangka kerja pengujian unit Objective-C, dan memiliki dukungan penuh untuk menjalankan tes unit berbasis XCTest sebagai bagian dari proses pembangunan proyek Anda. Dukungan pengujian unit Xcode dijelaskan dalam Ikhtisar Xcode: Menggunakan Tes Unit .

Kembali ke Xcode 2 hari, saya menulis serangkaian posting weblog tentang bagaimana melakukan beberapa tugas umum dengan pengujian unit Xcode:

Meskipun menggunakan OCUnit daripada XCTest, konsepnya sebagian besar sama.

Akhirnya, saya juga menulis beberapa posting tentang cara menulis tes untuk antarmuka pengguna Kakao; cara Cocoa terstruktur membuatnya relatif mudah, karena Anda tidak perlu memutar loop peristiwa atau semacamnya dalam kebanyakan kasus.

Hal ini memungkinkan untuk melakukan pengembangan yang digerakkan oleh tes tidak hanya untuk kode level model Anda tetapi juga kode level controller dan bahkan level tampilan Anda.


5
Peter Hosey juga memberikan presentasi yang baik tentang Pengujian Unit Kakao di Hutan Danau, pertemuan CA Cocoaheads pada bulan Desember. Berikut video-nya: vimeo.com/2725498
Grant Limberg

1
Ketika saya memulai hal-hal iOS sekitar setahun yang lalu saya menemukan bahwa OCUnit memiliki (bagi saya) kelemahan serius - saya tidak dapat menjalankannya di simulator atau perangkat. Mungkin sudah berubah sejak saat itu - saya belum memeriksa, tapi saya sudah menggunakan GHUnit hanya karena alasan itu.
drekka

1
Apakah ada video Pengembang Apple resmi tentang hal ini? Saya pergi melalui WWDC 2011 dan 2010 tetapi tidak dapat menemukan ... aneh karena pengujian itu penting ya?
Robert

4
Tautan Panduan Pengujian Unit Xcode telah pindah ke Panduan Pengujian Unit Xcode
Steven Green

5
Xcode 5 sekarang memiliki XCTest apakah masih menyertakan OCUnit? Apakah Anda akan memperbarui jawaban Anda dengan informasi untuk
XCode

50

Lihat GHUnit oleh Gabriel Handford:

"Tujuan GHUnit adalah:

Menjalankan pengujian unit dalam XCode, memungkinkan Anda untuk sepenuhnya memanfaatkan XCode Debugger. GUI sederhana untuk membantu Anda memvisualisasikan tes Anda. Tampilkan jejak tumpukan. Dapat diinstal sebagai kerangka kerja (untuk aplikasi Cocoa) dengan pengaturan target yang sederhana (atau tidak); atau mudah dimasukkan ke dalam proyek iPhone Anda. "


5
+1 untuk GHUnit! Saya baru dalam pengembangan iPhone dan saya dapat dengan jujur ​​mengatakan bahwa saya telah mengaktifkan dan menjalankan GHUnit tanpa instruksi (instruksi yang sempurna) dibandingkan dengan mimpi buruk absolut OCUnit dan migrain ringan GTM. GHUnit menang untuk kegunaan dan kemudahan!
Tim Reddy

3
Perhatikan bahwa jawaban ini dan komentar yang menyertainya ditulis beberapa waktu lalu. Xcode memiliki dukungan yang jauh lebih baik untuk tes berbasis OCUnit sekarang, membuatnya mudah untuk mengatur tes dan menjalankannya di debugger.
Kristopher Johnson

1
Proyek ini sejak itu sudah tidak digunakan lagi.
BigHeadCreations



12

Perhatikan bahwa proyek Google Toolbox untuk Mac (GTM) hanya memperluas / menambah kerangka kerja SenTestingKit Apple (yang didasarkan pada OCUnit). Seperti yang mereka katakan di situs proyek:

GTM memiliki beberapa peningkatan pada SenTestingKit standar yang memungkinkan Anda melakukan pengujian unit UI, pengujian unit mengikat otomatis, pelacakan log, dan pengujian unit pada iPhone, serta alat untuk melakukan pengujian statis dan dinamis kode Anda.

Perhatikan komentar berikut tentang pengujian antarmuka pengguna:

GTM memiliki dukungan luas untuk pengujian unit antarmuka pengguna. Ini mendukung pengujian baik pencitraan dan / atau keadaan internal dari hampir semua objek UI Kakao / UIKit standar, dan membuatnya mudah bagi Anda untuk memperluas dukungan ini ke objek UI Anda sendiri.

Lihat halaman " Verifikasi Kode dan Pengujian Unit " untuk instruksi tentang cara menggunakannya.


12

Saya sampai pada kesimpulan bahwa GHUnit adalah kerangka pengujian paling canggih untuk Objective-C. Saya telah melakukan pengumpulan kerangka kerja pengujian di blog saya. Ini adalah yang paling fleksibel dalam hal penyebaran (iphone, simulator atau mac os native) dan menegaskan kemampuan. Karena didasarkan pada GTM, ia mewarisi semua kelebihan GTM dibandingkan SenTestingKit tetapi juga menambahkan lebih banyak. Bonus lainnya adalah tetap dipertahankan dengan sangat aktif.

Saya telah melakukan upaya untuk mengintegrasikan OCMock ke GHUnit, ini bekerja dengan sangat baik !. Anda bisa mendapatkan kode di github .


12

Saya menyadari ini adalah pertanyaan lama, tetapi jika Anda lebih suka pengujian gaya BDD (rspec, Jasmine, dll.) Daripada pengujian gaya xUnit (Uji :: Unit, JSUnit, JUnit, dll.), Maka Anda dapat mempertimbangkan untuk memeriksa Cedar . Cedar membawa pengujian gaya BDD ke Objective-C, sekarang bahasanya mendukung penutupan.

Kami dengan senang hati menggunakan Cedar untuk proyek iOS kami di Pivotal Labs , dan kami secara aktif berupaya memperbaikinya. Setiap umpan balik atau saran diterima di cedar-discuss@googlegroups.com


10

Saya juga akan merekomendasikan menggunakan alat cakupan untuk melihat bagian mana dari kode yang ditutupi dengan tes unit dan mana yang tidak. Cakupan garis dasar dan kode cabang dapat dihasilkan dengan alat GCOV . Jika Anda ingin menghasilkan laporan cakupan HTML yang bagus, ada LCOV dan ZCOV yang melakukan hal itu.









3

Specta adalah kerangka kerja TDD (Test Driven Development) / BDD (Behavior Driven Development) modern yang berjalan di atas XCTest. Ini mendukung pengujian unit untuk proyek iOS dan Mac OS X.


0

Saya harap Anda dapat menggunakan 'SenTestKit', dari mana Anda dapat menguji setiap metode.

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.