मान लीजिए कि मेरे पास कई OrderProcessor
एस हैं, उनमें से प्रत्येक एक आदेश को थोड़ा अलग तरीके से संभालता है।
निर्णय के बारे में जो OrderProcessor
उपयोग करने के लिए Order
ऑब्जेक्ट के गुणों के अनुसार किया जाता है, और, इसलिए जैसे एक कारखाने विधि द्वारा किया जाता है:यूनिट परीक्षण फ़ैक्टरी विधि
public IOrderProcessor CreateOrderProcessor(IOrdersRepository repository, Order order, DiscountPercentages discountPercentages)
{
if (order.Amount > 5 && order.Unit.Price < 8)
{
return new DiscountOrderProcessor(repository, order, discountPercentages.FullDiscountPercentage);
}
if (order.Amount < 5)
{
// Offer a more modest discount
return new DiscountOrderProcessor(repository, order, discountPercentages.ModestDiscountPercentage);
}
return new OutrageousPriceOrderProcessor(repository, order);
}
अब, मेरी समस्या यह है कि मुझे लगता है कि सत्यापित करना चाहते है लौटा OrderProcessor
सही पैरामीटर प्राप्त किया है (उदाहरण के लिए - सही छूट प्रतिशत)।
हालांकि, वे गुण OrderProcessor
इकाइयों पर सार्वजनिक नहीं हैं।
आप इस परिदृश्य को संभालने का सुझाव कैसे देंगे?
एकमात्र समाधान मैं के साथ OrderProcessor
सार्वजनिक की छूट प्रतिशत संपत्ति कर रही है आने के लिए सक्षम था, लेकिन यह एक overkill करने के लिए की तरह सिर्फ इकाई परीक्षण के लिए है कि लगता है ...
हालांकि यह अच्छा और अच्छा है, यह जानना उचित लगता है कि सही छूट प्रतिशत का उपयोग किया जा रहा है, अन्यथा कोई भी शीर्ष पथ दोनों को 'छूट प्रतिशत। पूर्ण DiscountPercentage' वापस करने के लिए कोड बदल सकता है और कोई भी नहीं जानता, और अचानक लोगों को मामूली एक –
ठीक से पूर्ण छूट मिलना शुरू हो जाएगा, ठीक है, वर्चुअल विधि में डिस्काउंटऑर्डर प्रोसेसर का निर्माण करें और सुनिश्चित करें कि इसे आपके फैक्ट्री तर्क के आधार पर उपयुक्त पैरामीटर के साथ बुलाया गया है। – PatrickSteele
मुझे पैट्रिक से सहमत होना होगा। ऐसा लगता है कि आप इकाई परीक्षण से एकीकरण परीक्षण में बाहर निकल रहे हैं (जो भी महत्वपूर्ण है)। यूनिट परीक्षण एक तार्किक इकाई के लिए है और प्रत्येक ऑर्डर प्रोसेसर के पास अपने स्वयं के यूनिट परीक्षण होना चाहिए। –