मेरी वर्तमान परियोजना में, मैं एक अच्छा समाधान के साथ आ रहा हूं कि स्केलेबल एकीकरण परीक्षण बनाने के लिए एक अच्छा समाधान है जिसका कोई दुष्प्रभाव नहीं है। साइड इफेक्ट फ्री प्रॉपर्टी पर थोड़ा स्पष्टीकरण: यह ज्यादातर डेटाबेस के बारे में है; परीक्षण पूरा होने के बाद डेटाबेस में कोई बदलाव नहीं होना चाहिए (राज्य को संरक्षित किया जाना चाहिए)। शायद स्केलेबिलिटी और स्टेट प्रोटेक्शन एक साथ नहीं आते हैं, लेकिन मैं वास्तव में बेहतर समाधान के लिए जोर लगाना चाहता हूं।
यहां एक विशिष्ट एकीकरण परीक्षण है (ये परीक्षण डेटाबेस परत को छूते हैं):
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();
}
}
जैसा कि कोई कल्पना कर सकता है, यह दृष्टिकोण उन परीक्षणों की पैदावार करता है जो बेहद धीमी हैं। और, जब पूरे एकीकरण परीक्षणों पर लागू किया जाता है, तो सिस्टम के केवल एक छोटे हिस्से का परीक्षण करने में लगभग 5 सेकंड लगते हैं। मैं इस संख्या की कल्पना कर सकता हूं जब कवरेज बढ़ेगा।
इस तरह के परीक्षण लिखने के लिए एक और तरीका क्या होगा? एक विकल्प जिसके बारे में मैं सोच सकता हूं वह है वैश्विक चर (एक वर्ग के भीतर) और सभी परीक्षण विधियां इस चर को साझा करती हैं। परिणामस्वरूप, केवल कुछ ही आदेश बनते और नष्ट होते हैं; तेजी से परीक्षण के परिणामस्वरूप। हालाँकि, मुझे लगता है कि यह एक बड़ी समस्या का परिचय देता है; परीक्षण अब अलग-थलग नहीं हैं और उन्हें समझना और उनका विश्लेषण करना अधिक से अधिक कठिन हो गया है।
यह सिर्फ इतना हो सकता है कि एकीकरण परीक्षण को इकाई परीक्षणों के रूप में अक्सर चलाने के लिए नहीं है; इसलिए कम प्रदर्शन उन लोगों के लिए स्वीकार्य हो सकता है। किसी भी मामले में, यह जानना बहुत अच्छा होगा कि क्या कोई स्केलेबिलिटी में सुधार के लिए विकल्पों के साथ आया है।