Sulit dan tidak realistis untuk mempertahankan data tiruan besar. Ini bahkan lebih sulit ketika struktur basis data mengalami perubahan.
Salah.
Pengujian unit tidak memerlukan data tiruan "besar". Ini membutuhkan data tiruan yang cukup untuk menguji skenario dan tidak lebih.
Juga, programmer yang benar-benar malas meminta ahli materi pelajaran untuk membuat lembar kerja sederhana dari berbagai kasus uji. Hanya spreadsheet sederhana.
Kemudian programmer malas menulis skrip sederhana untuk mengubah baris spreadsheet menjadi unit uji kasus. Ini sangat sederhana, sungguh.
Ketika produk berevolusi, spreadsheet dari kasus uji diperbarui dan tes unit baru dihasilkan. Lakukan sepanjang waktu. Ini benar-benar berfungsi.
Bahkan dengan MVVM dan kemampuan untuk menguji GUI, dibutuhkan banyak kode untuk mereproduksi skenario GUI.
Apa? "Reproduksi"?
Maksud dari TDD adalah untuk Merancang hal-hal untuk Testability (Pengembangan Drive Test). Jika GUI sangat kompleks, maka harus didesain ulang agar lebih sederhana dan lebih dapat diuji. Simpler juga berarti lebih cepat, lebih mudah dirawat dan lebih fleksibel. Tetapi sebagian besar lebih sederhana akan berarti lebih dapat diuji.
Saya memiliki pengalaman bahwa TDD berfungsi dengan baik jika Anda membatasinya pada logika bisnis sederhana. Namun logika bisnis yang kompleks sulit untuk diuji karena jumlah kombinasi tes (ruang uji) sangat besar.
Itu bisa benar.
Namun, meminta ahli materi pelajaran untuk memberikan kasus uji inti dalam bentuk sederhana (seperti spreadsheet) sangat membantu.
Spreadsheet bisa menjadi agak besar. Tapi tidak apa-apa, karena saya menggunakan skrip Python sederhana untuk mengubah spreadsheet menjadi kasus uji.
Dan. Saya memang harus menulis beberapa test case secara manual karena spreadsheet tidak lengkap.
Namun. Ketika pengguna melaporkan "bug", saya hanya bertanya kasus uji mana dalam spreadsheet yang salah.
Pada saat itu, para ahli materi akan mengoreksi spreadsheet atau mereka akan menambahkan contoh untuk menjelaskan apa yang seharusnya terjadi. Laporan bug dapat - dalam banyak kasus - secara jelas didefinisikan sebagai masalah kasus uji. Memang, dari pengalaman saya, mendefinisikan bug sebagai test case yang rusak membuat diskusi jauh lebih mudah.
Daripada mendengarkan para ahli mencoba menjelaskan proses bisnis yang sangat kompleks, para ahli harus menghasilkan contoh nyata dari proses tersebut.
TDD mensyaratkan bahwa persyaratannya 100% benar. Dalam kasus seperti itu, orang dapat berharap bahwa persyaratan yang bertentangan akan ditangkap selama pembuatan tes. Tetapi masalahnya adalah bahwa ini tidak terjadi dalam skenario yang kompleks.
Tidak menggunakan TDD benar-benar mengamanatkan bahwa persyaratannya 100% benar. Beberapa mengklaim bahwa TDD dapat mentolerir persyaratan yang tidak lengkap dan berubah, di mana pendekatan non-TDD tidak dapat bekerja dengan persyaratan yang tidak lengkap.
Jika Anda tidak menggunakan TDD, kontradiksi ditemukan terlambat dalam tahap implementasi.
Jika Anda menggunakan TDD kontradiksi ditemukan sebelumnya ketika kode melewati beberapa tes dan gagal tes lainnya. Memang, TDD memberi Anda bukti kontradiksi sebelumnya dalam proses, jauh sebelum implementasi (dan argumen selama pengujian penerimaan pengguna).
Anda memiliki kode yang lulus beberapa tes dan gagal lainnya. Anda hanya melihat tes-tes itu dan Anda menemukan kontradiksinya. Ini bekerja sangat, sangat baik dalam praktiknya karena sekarang pengguna harus berdebat tentang kontradiksi dan menghasilkan contoh-contoh konkret dari perilaku yang diinginkan.