Basit testler yapmak için, veritabanı erişim katmanını taklit etmek son derece kabul edilebilir. Diyorsun getName()
, DAO alay denir ve ilk isim için "John" ve soyadı için "Smith" döndürür, onları birleştirir ve her şey mükemmel. Aslında orada bir veritabanı birim test etmek gerek.
Mantık biraz daha karmaşık hale geldiğinde işler biraz daha fazla olur. Ya "createOrUpdateUser (...)" yönteminiz varsa. Veritabanına alay ederseniz, sahte bir nesne döndürmediğinde belirli bir parametreyle belirli bir yöntemin bir kez çağrıldığını ve varolan bir nesneyi geri döndürdüğünde veritabanında farklı bir yöntem çağrıldığını doğrulayabilirsiniz. Bu, bellek veritabanında bir uzmanı döndürmenin ve bu kodu önceden yapılandırılmış verilerle test etmenin daha kolay olabileceği (özellikle zaten oradaysa) bulanık çizgiye ulaşmaya başlar.
Üzerinde çalıştığım bazı gerçek kodlarda (satış noktası) bir resumeSuspededTransaction(...)
yöntemimiz vardı . Bu, işlemi veritabanından bir nesneye (ve bileşenlerine) çeker ve veritabanını günceller. Biz alay ve bir hata kodu bir yerde veritabanına gidiyor serileştirme ve serileştirme ile bir yerde gizlenmiş (biz veritabanında farklı serileştirilmiş bir tür değiştirdi).
Alaycı bize hatayı göstermedi çünkü mutlu yolunu döndürüyordu - işlemi seri hale getirin, alayda saklayın, alaydan serisini kaldırın, eşit olduklarını test edin. Ancak, bir nesneyi veritabanına önde gelen bir sıfırla serileştirdiğinizde, onları bırakıyor ve daha sonra sıfırlar olmadan bir dizeye yeniden birleştiriyordu. Biz sorun giderme yoluyla veritabanı olmadan hata yakaladı (biz orada olduğunu biliyordu bir kez noktaya zor değildi).
Daha sonra oraya bir veritabanı koyduk ve bunun yerine bellek veritabanına gidersek, hatanın bu junit testinden asla geçemeyeceğini fark ettik.
Bellek veritabanlarında avantajları vardır:
- test için hızlı bir şekilde döndürülebilir (hesaplar, tablolar ve benzerlerini ayarlamak için bir DBA'ya ihtiyaç duymadan)
- veriler bu test için önceden yapılandırılabilir
- testin bittiğinde testin geri alınması konusunda endişelenmesine gerek yoktur
- her testin bellek veritabanında kendine ait olması nedeniyle aynı anda iki testin çalışıp çalışmadığını düşünmenize gerek kalmaz
- gerçek veritabanlarına bağlantısı olmayan sistemlerde çalıştırılabilirler