Saya sedang mengerjakan proyek saat ini yang menghasilkan tabel (antara lain) berdasarkan isi dari sistem file, dan pada gilirannya melakukan beberapa modifikasi meta-data pada hal-hal yang ditemukannya. Pertanyaannya adalah: bagaimana tes harus ditulis tentang ini, atau mengatur? Apakah ada cara mudah untuk mengejek ini? Atau haruskah saya menyiapkan "kotak pasir"?
testing
unit-testing
file-handling
Kirbinator
sumber
sumber
Apa yang salah dengan memiliki sistem file "test"?
Buat folder template / struktur direktori yang memiliki cukup konten untuk menguji operasi Anda.
Selama pengaturan unit tes Anda salin struktur awal ini (akan merekomendasikan Anda ZIP templat dan unzip ke area pengujian Anda). Jalankan tes Anda. Hapus semuanya saat meruntuhkan.
Masalah dengan mengejek adalah pertama-tama sistem file, OS dan database milik proyek Anda tidak benar-benar memenuhi syarat sebagai sumber daya eksternal dan kedua mengejek panggilan sistem tingkat rendah adalah memakan waktu dan rentan kesalahan.
sumber
Ini adalah jenis hal yang Anda perlu uji integrasi, karena sistem file dunia nyata memiliki semua jenis perilaku aneh (seperti cara Windows tidak akan membiarkan menghapus file jika ada proses, termasuk deleter, buka).
Jadi pendekatan TDD adalah menulis tes integrasi terlebih dahulu (TDD, sebenarnya, tidak memiliki konsep 'tes unit' dan 'tes integrasi' yang berbeda; mereka hanya tes). Sangat mungkin itu sudah cukup; begitu pekerjaan selesai, hentikan, pulanglah .
Jika tidak, akan ada beberapa kompleksitas internal yang tidak mudah diuji secara memadai dengan mengatur file. Dalam hal ini, Anda cukup mengeluarkan kompleksitas itu, memasukkannya ke dalam kelas, dan menulis unit test untuk kelas itu . Sangat mungkin Anda akan menemukan bahwa kelas umum dapat digunakan dalam kasus database, xml, dll.
Dalam kasus apa pun Anda tidak akan mengambil inti mendasar dari kode yang Anda tulis dan 'mengejeknya' untuk menulis tes yang akan lulus apakah unit yang diuji salah atau tidak.
sumber
'unit test' and 'integration test'; they are just tests.
saya pikir secara realistis, ini akan menjadi solusi terbaik untuk kasus saya - saya benar-benar perlu menguji perpustakaan sistem file yang saya gunakan untuk kasus tepi, dan bagaimana aplikasi harus menanggapi itu. Jika saya beralih ke pustaka sistem file yang berbeda, saya tidak ingin harus menulis ulang sekelompok mengejek / kode uji untuk bekerja dengan pustaka baru, tetapi memiliki struktur folder tes dan tes integrasi akan membuatnya lebih sederhana.Saya memahami pertanyaan Anda sebagai "Cara yang baik / diterima untuk menguji kelas yang tergantung pada operasi sistem file". Saya tidak berasumsi bahwa Anda ingin menguji sistem file os Anda.
Untuk menjaga upaya untuk 'antarmuka ke operasi sistem file Anda dan "mengejek mereka"' sebagai jawaban @ Doc Brown disarankan sekecil mungkin itu adalah ide yang baik untuk menggunakan aliran biner java atau pembaca teks (atau ada yang setara dalam c # atau bahasa pemrograman yang Anda gunakan) alih-alih menggunakan File dengan nama file langsung di kelas tdd-dikembangkan.
Contoh:
Menggunakan java, saya telah mengimplementasikan CsvReader kelas
Untuk pengujian saya menggunakan data memori seperti ini
atau embel testdata ke sumber daya
Dalam produksi saya menggunakan sistem file
Dengan cara ini CsvReader saya tidak bergantung pada sistem file tetapi pada abstraksi "Pembaca" di mana ada implementasi untuk sistem file.
sumber
Buat pembungkus untuk operasi sistem file. Dalam pengujian, berikan tiruan yang mengimplementasikan antarmuka yang sama dengan pembungkus. Dalam produksi, sampaikan bungkusnya.
sumber