Pertanyaannya secara khusus mengacu pada "pengujian kotak putih". Di sinilah tes Anda memiliki pengetahuan mendalam tentang struktur internal kode Anda dan menegaskan perilaku pada setiap langkah daripada hanya efek input / output / samping (pengujian kotak hitam). Sementara JUnit sangat baik untuk melakukan keduanya, Anda perlu kerangka kerja tambahan lebih lanjut untuk melakukan ini dalam konteks unit test.
EasyMock dan JMock adalah kerangka kerja yang baik untuk melakukan ini. Saya cenderung menyukai JMock.
Dengan risiko memulai debat PL, Anda harus berpikir hati-hati tentang implikasi pengujian kotak putih. Tes kotak putih terkait erat dengan kode Anda (jelas), dan jika tidak digunakan dengan hati-hati, kerangka kerja mengejek dapat menyebabkan tes Anda menjadi agak rumit, sulit dibaca dan cenderung lebih rapuh saat melakukan refactoring.
Saya cenderung bertahan pada campuran keduanya. Tes kotak hitam sedapat mungkin, dan tes kotak putih hemat diterapkan pada kode yang lebih berisiko / rumit.
Tentu saja kerangka kerja yang tercantum di atas juga dapat digunakan dalam tes kotak hitam di mana jumlah kelas yang berkontribusi (disuntikkan) besar dan penguburan sederhana menjadi sulit dilakukan.
Mengenai TDD - ini terutama pendekatan peningkatan desain untuk menulis kode, bukan hanya cara menulis tes. Tes yang Anda miliki pada akhirnya adalah output yang penting, tetapi terlebih lagi pendekatan ini dimaksudkan untuk meningkatkan desain dan struktur aplikasi Anda.