2015-08-12 17 views
6

Ben bütün kontrolör testleri uzatmak bir temel sınıf var. Bu, her birim testinin yüklenmesi için kendi Armatürüne sahip olabileceği şekilde ayarlanmıştır.bir birim test veritabanı ekleme/güncelleme yapıldığı takdirde Çal Çerçevede kontrol etme/silme

Yani @Before geçersiz kılma, test için gerekli fikstürü ne olduğunu kontrol yükleyin ve ardından testi başlayacaktır.

Buradaki sorun

bu fikstür her seferinde yeniden yükler olmasıdır. Yöntem, yalnızca veritabanında bir seçim yapsa bile, hiçbir şeyi değiştirmemiştir. Çal Çerçeve kullanan

dahili bellek veri tabanı H2 veritabanı. Bir birim testi yapıldıktan sonra kontrol etmenin bir yolu olup olmadığını merak ediyorum, eğer veritabanında bir değişiklik olduysa ve değilse, aynı verilerin yeniden yüklenmesini atlayın.

Ben ne olursa olsun null döndürür, identity_scope çalıştı.

+0

sadece JUnit en ile bunu başarmak için bir olasılık var ancak kolayca bu loadings yönetebileceğiniz bir araç var ise bilmiyorum görmüyorum. Onun dbunit ve oyunda kolayca kullanabilirsiniz. Junit'teki ana amacın, testleri birbirinden ayırmak olduğunu söyleyebilirim. ama ben mümkün değildir demiyorum Belki de test paketi ile birlikte @BeforeClass ile deneyebilirsiniz. –

+0

Baktım ve bunun için mevcut tüm birim testlerimi yeniden gözden geçirmem gerekiyor gibi görünüyor. Öneri için teşekkürler ama buna zaman koyamıyorum. – KdgDev

+0

Bellek veritabanından gerçek fiziksel veritabanına geçmeyi düşündünüz mü? –

cevap

2

H2 son değişiklik uygulanmadı zaman kontrol etmeyi hiçbir olasılıkları vardır. Sadece

CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW()); 

Sen Test başlamadan bir zaman kazandırabilecek Bu şekilde olan son değişiklik zaman kazandırır ek bir sütun olun ve sonra deney başlangıç ​​zamanından sonra herhangi bir değişiklik tarihleri ​​varsa DB sorgulamak olabilir Ancak .

Ben başka olası bir yol

+0

Tahmin ettiğim en iyi fikir bu, ancak birim testler çalışırken sadece bu sütunların var olduğundan emin olmak ve bir ekleme olduğunda otomatik olarak doldurmak için çok zaman harcıyorum. Hangi hatırlatıyor: Bir silme nedir? Bir silme işleminin gerçekleştiğini nasıl izlerim? – KdgDev

+0

Gönderdiğim sorgu ile, AS NOW() işlevi her zaman değiştiğinde çalıştırıldığı için zaman damgasını otomatik olarak herhangi bir değişiklik için gerçek zamana dönüştürecektir. Testlerde ek alan oluşturmak iyi bir fikir değil, ama ek sütun tüm program için büyük bir fark yaratmayacağını söyleyebilirim. Sadece test amaçlı olsa bile –

+0

Tamam. Ama bir sınamada bir satırı silmeye ve sonra bir sonraki sırada olmasını beklemeye ne dersin? Ve yine de, bu sadece hangi tabloyu test edeceğimi bilirse işe yarar. Gerçekten ihtiyacım olan şey, tüm DB'deki herhangi bir tablonun değiştirilmiş olup olmadığını tespit etmenin bir yoludur. – KdgDev