Saya sedang mengerjakan proyek dengan beberapa format file. Beberapa format ditentukan oleh .xsds, lainnya oleh dokumentasi di situs web masing-masing, dan beberapa format khusus yang tidak memiliki dokumentasi. Mwahahahaha.
Apa masalahnya?
Saya ingin menguji pembaca file saya, tetapi saya tidak sepenuhnya yakin bagaimana cara melakukan ini. Alur aplikasi adalah sebagai berikut:
file.___ ===> read by FileReader.java ===> which creates a Model object
di mana FileReader
antarmuka
public interface FileReader {
public Model read(String filename);
}
The Model
memiliki sejumlah atribut yang dihuni ketika file tersebut dibaca. Itu terlihat seperti
public class Model {
List<String> as;
List<String> bs;
boolean isAPain = true;
// ...
}
Apa yang sudah saya coba?
Satu-satunya ide saya adalah membuat file "generator" untuk setiap format file. Generator ini pada dasarnya adalah pembangun yang menerima beberapa variabel (mis. Jumlah komentar untuk dihasilkan dalam file), dan mengeluarkan file sampel yang kemudian saya baca dan bandingkan hasilnya Model
dengan variabel yang saya gunakan untuk menghasilkan file.
Ini memiliki beberapa masalah, meskipun:
- File yang dihasilkannya tidak terlihat seperti file nyata. Generator sama sekali tidak menyadari konteksnya.
- Sulit untuk mengenali apakah generator telah menghasilkan kasus tepi karena akulah yang secara manual mengatur variabel. Metode ini hampir tidak lebih baik daripada saya membuat selusin file sampel.
Apakah ada cara yang lebih baik untuk melakukan ini?
EDIT: Mengubah unit menjadi integrasi karena itulah yang saya maksud sebenarnya.
EDIT2: Berikut adalah contoh dari kasus tepi yang saya sebutkan.
Setiap file mewakili grafik yang terdiri dari simpul dan tepi. Vertikal dan tepi ini dapat dilampirkan dengan berbagai cara, jadi:
v1 -- e1 --> v2 <-- e2 -- v3
berbeda dengan
v1 -- e1 --> v2 -- e2 --> v3
dalam hal arah tepi penting. Saya tidak yakin apakah ini dalam lingkup pertanyaan, tetapi sulit untuk memikirkan semua kasus tepi terkait ketika saya secara manual mengatur jumlah simpul, jumlah tepi, dan hanya menghasilkan koneksi secara acak.
FileReader
implementasi aktual )? Contoh: mengingat kasus tepi yang ditemukan dalam format file gambar , untuk setiap entri tabel, jika kombinasi baris / kolom dari properti didukung, harus ada setidaknya satu kasus uji (file data) yang mencakup kombinasi itu.Jawaban:
Pertama, mari kita bicara tentang apa tujuan Anda:
Anda jelas tidak ingin menguji "format file" - Anda ingin menguji
FileReader
implementasi yang berbedaAnda ingin menemukan berbagai jenis kesalahan sebanyak mungkin dengan tes otomatis
Untuk mencapai tujuan itu secara penuh, IMHO Anda harus menggabungkan berbagai strategi:
FileReader
implementasi Anda akan terdiri dari banyak bagian dan fungsi yang berbeda. Tulis tes kecil yang menguji masing-masing secara terpisah; mendesain fungsi Anda dengan cara yang tidak benar-benar perlu untuk membaca data dari file. Tes semacam ini akan membantu Anda menguji sebagian besar kasus tepi Anda.FileReader
, tetapi mungkin layak untuk melakukan ini karena sering menemukan bug yang tidak diungkapkan oleh dua strategi pertama. Beberapa orang akan menyebut hal-hal semacam ini juga "tes integrasi", yang lain lebih suka "tes penerimaan", tetapi pada kenyataannya istilah itu tidak terlalu penting.IMHO tidak ada pendekatan "jalan pintas" yang akan memberi Anda manfaat dari ketiga strategi "untuk harga satu". Jika Anda ingin mendeteksi kasus tepi serta kegagalan dalam kasus standar serta kasus dunia nyata, Anda harus berinvestasi setidaknya beberapa - lebih mungkin banyak - usaha. Untungnya, semua pendekatan itu dapat digunakan untuk membuat pengujian otomatis yang dapat diulang.
Selain itu, Anda harus memastikan bahwa Anda
FileReader
tidak menutupi kesalahan saat membaca data itu - buat pemeriksaan / pernyataan bawaan, berikan pengecualian ketika ada yang tidak beres secara internal dll. Ini memberikan kode pengujian peluang yang jauh lebih baik untuk mendeteksi kesalahan , bahkan ketika Anda tidak memiliki file tes eksplisit atau test case untuk situasi yang tidak terduga.sumber