Saat menulis tes, mengapa seseorang ingin menggunakan basis data dalam memori hanya dengan mengejek data?
Saya dapat melihat bahwa basis data dalam memori dapat bermanfaat untuk menguji repositori seseorang. Tetapi jika menggunakan kerangka kerja (seperti Spring Data), menguji repositori akan menguji kerangka kerja dan tidak benar-benar logika aplikasi.
Namun, mengejek tampaknya lebih cepat dan mengikuti pola yang sama yang biasanya digunakan saat menulis unit test dan TDD.
Jadi apa yang saya lewatkan? Kapan / mengapa basis data dalam memori akan bermanfaat?
Sebagian besar waktu, pengujian basis data dalam memori lebih sederhana daripada mengejek. Ini juga jauh lebih fleksibel. Dan itu juga menguji file migrasi dilakukan dengan baik (ketika ada file migrasi).
Lihat kode semu ini:
Tidak
InMemoryTest
tergantung pada bagaimanaDatabase
diterapkan ke dalamUserRepository
pekerjaan. Itu hanya menggunakanUserRepository
antarmuka publik (create
) dan kemudian menegaskan menentangnya. Tes itu tidak akan rusak jika Anda mengubah implementasi tetapi lebih lambat.Sementara itu,
MockingDBTest
sepenuhnya bergantung pada bagaimanaDatabase
diimplementasikan ke dalamUserRepository
. Bahkan, jika Anda mengubah implementasi tetapi masih membuatnya bekerja dengan cara lain, tes itu akan pecah.Terbaik dari kedua dunia akan menggunakan palsu yang mengimplementasikan
Database
antarmuka:Itu jauh lebih ekspresif, lebih mudah dibaca dan dimengerti, dan itu tidak tergantung pada implementasi dari Database aktual yang dilakukan pada lapisan kode yang lebih tinggi.
sumber