Saya mempelajari konsep Test-Driven Development dengan membaca artikel Craftsman (klik Craftsman di bawah By Topic ) yang direkomendasikan untuk menjawab pertanyaan saya sebelumnya, "Contoh proyek untuk mempelajari JUnit dan rekayasa perangkat lunak yang tepat" . Saya menyukainya sejauh ini!
Tapi sekarang saya ingin duduk dan mencobanya sendiri. Saya punya pertanyaan yang saya harap hanya membutuhkan jawaban sederhana.
Bagaimana Anda mengatur kelas pengujian JUnit dan kode Anda yang sebenarnya? Saya berbicara terutama tentang struktur paket, tetapi konsep catatan lainnya juga akan membantu.
Apakah Anda menempatkan kelas pengujian di org.myname.project.test. * Dan kode normal di org.myname.project. *? Apakah Anda menempatkan kelas tes tepat di samping kelas normal? Apakah Anda lebih memilih untuk memberi awalan nama kelas dengan Test daripada mengakhirinya?
Saya tahu ini sepertinya hal yang tidak perlu saya khawatirkan secepat ini, tetapi saya adalah orang yang sangat berorientasi pada organisasi. Saya hampir seperti tipe orang yang menghabiskan lebih banyak waktu untuk mencari tahu metode untuk melacak apa yang harus dilakukan, daripada benar-benar menyelesaikan sesuatu.
Dan saya memiliki proyek yang saat ini terbagi dengan rapi ke dalam paket, tetapi proyek tersebut menjadi berantakan. Alih-alih mencoba merefaktor semuanya dan menulis tes, saya ingin memulai dari awal, tes pertama dan semuanya. Tapi pertama-tama saya perlu tahu kemana perginya tes saya.
edit: Saya benar-benar lupa tentang Maven, tetapi tampaknya sebagian besar dari Anda menggunakannya! Di masa lalu, saya memiliki kasus penggunaan khusus di mana Maven benar-benar mengecewakan saya, tetapi Ant memberi saya fleksibilitas yang saya butuhkan, jadi saya akhirnya terikat dengan Ant, tetapi saya berpikir mungkin saya hanya mengambil pendekatan yang salah. Saya rasa saya akan mencoba Maven lagi karena sepertinya ini akan berjalan dengan baik dengan pengembangan yang digerakkan oleh pengujian.
sumber
Jawaban:
Saya lebih suka menempatkan kelas uji ke dalam paket yang sama dengan kelas proyek yang mereka uji, tetapi dalam direktori fisik yang berbeda, seperti:
Dalam proyek Maven akan terlihat seperti ini:
Poin utama dalam hal ini adalah bahwa kelas pengujian saya dapat mengakses (dan menguji!) Kelas dan anggota cakupan paket.
Seperti yang ditunjukkan contoh di atas, kelas pengujian saya memiliki nama kelas yang diuji plus
Test
sebagai sufiks. Ini membantu menemukannya dengan cepat - tidak lucu mencoba mencari di antara beberapa ratus kelas tes, yang masing-masing namanya dimulai denganTest
...Pembaruan yang terinspirasi oleh komentar @ Ricket: dengan cara ini kelas tes (biasanya) muncul tepat setelah teman mereka yang diuji dalam daftar alfabetis proyek dari nama kelas. (Lucu bahwa saya mendapat manfaat dari hari demi hari, tanpa secara sadar menyadari bagaimana ...)
Pembaruan2: Banyak pengembang (termasuk saya) menyukai Maven, tetapi tampaknya ada juga yang tidak. IMHO sangat berguna untuk proyek Java "arus utama" (saya akan memasukkan sekitar 90% proyek ke dalam kategori ini ... tetapi 10% lainnya masih merupakan minoritas yang cukup besar). Mudah digunakan jika seseorang dapat menerima konvensi Maven; Namun jika tidak, itu membuat hidup menjadi perjuangan yang menyedihkan. Maven tampaknya sulit dipahami oleh banyak orang yang disosialisasikan di Ant, karena tampaknya memerlukan cara berpikir yang sangat berbeda. (Saya sendiri, karena tidak pernah menggunakan Ant, tidak dapat membandingkan keduanya.) Satu hal yang pasti: ini membuat pengujian unit (dan integrasi) menjadi langkah kelas satu yang alami dalam proses, yang membantu developer mengadopsi praktik penting ini.
sumber
public
) .Saya menempatkan kelas pengujian saya dalam paket yang sama dengan apa yang mereka uji tetapi dalam folder atau proyek sumber yang berbeda . Mengatur kode pengujian saya dengan cara ini memungkinkan saya untuk dengan mudah mengkompilasi dan mengemasnya secara terpisah sehingga file jar produksi tidak berisi kode pengujian. Ini juga memungkinkan kode pengujian untuk mengakses bidang dan metode privat paket.
sumber
Saya menggunakan Maven . Struktur yang dipromosikan Maven adalah: -
yaitu kelas pengujian dengan Ujian yang diawali dengan nama kelas yang diuji berada dalam struktur direktori paralel dengan pengujian utama.
Satu keuntungan memiliki kelas pengujian dalam paket yang sama (meskipun tidak harus direktori) adalah Anda dapat memanfaatkan metode cakupan paket untuk memeriksa atau memasukkan objek pengujian tiruan.
sumber
<class>Test.java
, bukanTest<class>.java
<class>Test.java
skema penamaan membuat kelas utama dan kelas pengujian muncul lebih dekat saat menggunakan fitur pencarian IDE, yang membuatnya sedikit lebih baik daripadaTest<class>.java
.