İş yerimde projelerimden biri çoğunlukla harici bir müşteriden aktarılan verilerin alınması ve veritabanında kalması ile ilgili. JPA kullanan bir Java kurumsal uygulamasıdır ve mantığımızın çoğu CRUD işlemleri etrafında döner.
Böceklerimizin çoğu JPA'yı bir şekilde veya başka şekilde içerir.
- Örnek 1: Kaydet düğmesine iki kez tıklarsanız, JPA aynı varlığı veritabanına ikinci kez eklemeye çalışarak birincil anahtar ihlaline neden olabilir.
- Örnek 2: Veritabanından bir varlık alırsınız, düzenler ve verilerini güncellemeye çalışırsınız. JPA eskisini güncellemek yerine yeni bir örnek oluşturmaya çalışabilir.
Genellikle çözüm, bir JPA ek açıklaması eklemek / kaldırmak / değiştirmek için ihtiyaç duyar. Diğer zamanlarda DAO mantığını değiştirmekle ilgili.
Ünite testleri ve TDD kullanarak kodumuza nasıl güveneceğimi bilemiyorum. Bunun nedeni ünite testleri ve TDD'nin uygun olmadığından veya soruna yanlış yaklaşıyorsam emin değilim.
Ünite testleri kötü bir uygulama gibi gözüküyor çünkü bu sorunları yalnızca çalışma zamanında keşfedebiliyorum ve sorunları çoğaltmak için bir uygulama sunucusuna dağıtmam gerekiyor. Genellikle, bir birim testi tanımının dışında olduğumu düşündüğüm veritabanının dahil olması gerekir: Bunlar entegrasyon testleridir.
TDD kötü bir uyum gibi görünüyor çünkü konuşlandırma + test geri besleme döngüsü o kadar yavaş ki beni çok verimsiz yapıyor. Konuşlandırma + test geri besleme döngüsü 3 dakikadan fazla sürüyor ve bu sadece testleri yazdığım kodla ilgili olarak çalıştırmam durumunda. Tüm entegrasyon testlerini çalıştırmak 30 dakika sürer.
Bu kalıbın dışında kod var ve yapabildiğimde bunu her zaman test ediyordum. Ancak böceklerimizin büyük çoğunluğu ve en büyük lavabolar her zaman JPA veya veri tabanını içerir.
Benzer olan başka bir soru daha var , ancak tavsiyeye uyursam kodumun (JPA) en dengesiz bölümünü sarar ve dışındaki her şeyi test ederdim. Sorumu bağlamında aynı kötü durumda olurdum. JPA'yı tamamladıktan sonraki adım nedir? IMO bu soru (belki de) soruma cevap vermek için bir adım, ama buna bir cevap değil.
unit testing != TDD
)