Mevcut projemde, yan etkisi olmayan ölçeklenebilir entegrasyon testleri oluşturmak için iyi bir çözüm bulmakta zorlanıyorum. Yan etkisi ücretsiz özelliği hakkında biraz açıklama: çoğunlukla veritabanı ile ilgili; testler tamamlandıktan sonra veritabanında herhangi bir değişiklik olmamalıdır (durum korunmalıdır). Belki ölçeklenebilirlik ve devletin korunması bir araya gelmez, ama gerçekten daha iyi bir çözüm bulmak istiyorum.
İşte tipik bir entegrasyon testi (bu testler veritabanı katmanına dokunur):
public class OrderTests {
List<Order> ordersToDelete = new ArrayList<Order>();
public testOrderCreation() {
Order order = new Order();
assertTrue(order.save());
orderToDelete.add(order);
}
public testOrderComparison() {
Order order = new Order();
Order order2 = new Order();
assertFalse(order.isEqual(order2);
orderToDelete.add(order);
orderToDelete.add(order2);
}
// More tests
public teardown() {
for(Order order : ordersToDelete)
order.delete();
}
}
Tahmin edebileceğiniz gibi, bu yaklaşım son derece yavaş testler sağlar. Ve tüm entegrasyon testlerine uygulandığında, sistemin sadece küçük bir bölümünü test etmek yaklaşık 5 saniye sürer. Kapsam arttıkça bu sayının arttığını hayal edebiliyorum.
Bu tür testleri yazmak için başka bir yaklaşım ne olabilir? Düşünebileceğim bir alternatif, bir sınıfta küresel değişkenlere sahip olmaktır ve tüm test yöntemleri bu değişkeni paylaşır. Sonuç olarak, yalnızca birkaç sipariş oluşturulur ve silinir; daha hızlı testlerle sonuçlanır. Ancak, bunun daha büyük bir sorun getirdiğini düşünüyorum; testler artık izole edilmedi ve bunları anlamak ve analiz etmek gittikçe zorlaşıyor.
Entegrasyon testlerinin birim testler kadar sık yapılması gerekmiyor olabilir; bu nedenle düşük performans olanlar için kabul edilebilir. Her durumda, birisinin ölçeklenebilirliği geliştirmek için alternatifler bulup bulmadığını bilmek harika olurdu.