2011-09-21 17 views
5

मुझे बताया गया है कि यूनिट टेस्ट मामलों को लिखने के लिए फैक्टरी/सार फैक्टरी डिजाइन पैटर्न बहुत प्रभावी हैं, लेकिन मैं किसी भी ट्यूटोरियल को खोजने में सक्षम हूं जो स्पष्ट रूप से इसे प्रदर्शित करता है। तो यह है, तो किसी ने मुझसे किसी भी मौजूदा ट्यूटोरियल को इंगित कर सकते हैं या मुझे कुछ छद्म कोड और स्पष्टीकरण यहाँ :)इकाई परीक्षण में फैक्टरी/सार फैक्टरी डिजाइन पैटर्न का उपयोग

उत्तर

6
GOF के अनुसार

देना बहुत उपयोगी हो जाएगा, सार फैक्टरी पैटर्न के आशय बनाने के लिए एक इंटरफेस प्रदान करना है संबंधित या आश्रित वस्तुओं के परिवारों को उनके conrcete कक्षाओं को निर्दिष्ट किए बिना।

ढांचे में अमूर्त कारखानों को आम तौर पर निर्भरता इंजेक्शन का उपयोग करके प्रदान किया जाता है, और यह कोड लिखने की वास्तविक कुंजी है जो परीक्षण करना आसान है। निर्भरता इंजेक्शन का मतलब है कि वर्ग के अंदर नए होने के बजाय, निर्भरताओं के माध्यम से निर्भरता "इंजेक्शन" होती है।

public class EasyGameFactory implements GameFactory 
{ 
    Dice createDice() 
    { 
    return new LuckyDice(); 
    } 
} 

public class NormalGameFactory implements GameFactory 
{ 
    Dice createDice() 
    { 
    return new RandomDice(); 
    } 
} 

इकाई परीक्षण प्रयोजनों के लिए क्या तुम सच में पासा कार्यान्वयन के न उपयोग करने के लिए पसंद करेंगे:

आप दो कारखानों का उपयोग बैकगैमौन के आसान और कठिन खेल के लिए निर्भरता (यहाँ सिर्फ एक निर्भरता, पासा) के उत्पादन के लिए मान लीजिए , इसलिए आप GameFactory का एक विशेष कार्यान्वयन लिखते हैं:

public class CustomGameFactory implements GameFactory 
{ 
    private Dice mDice; 

    public CustomGameFactory(Dice dice) 
    { 
    mDice = dice; 
    } 

    Dice createDice() 
    { 
    return mDice; 
    } 
} 

इस कारखाने को आपके उत्पादन कोड पेड़ का हिस्सा नहीं होना पड़ेगा। आप परीक्षण कोड के माध्यम से पासा का एक विशेष कार्यान्वयन के साथ कारखाने की आपूर्ति:

public class TestBackgammon 
{ 
    @Test public void shouldReturnDiceThrown() 
    { 
    SettableDice dice = new SettableDice(); 
    Game game = new GameImpl(new CustomGameFactory(dice)); 

    dice.setDice(new int[] {4, 5}); 
    game.nextTurn(); 
    assertArrayEquals(new int[] {4, 5}, game.diceThrown()); 
    } 
} 
इस दृष्टिकोण कोई ठोस निर्भरता परीक्षण प्रयोजनों के लिए इंजेक्ट किया जा सकता के साथ

। हालांकि, अक्सर एक सार फैक्ट्री के बिना हासिल किया जा सकता है, यानी कारखाने को इंजेक्शन देने के बजाय, निर्भरता को इंजेक्शन दिया जा सकता है।

संबंधित मुद्दे