2016-10-02 15 views
6

मैं Google cloud storage का उपयोग करता है जाओ में एक ऐप्लिकेशन इंजन एप्लिकेशन लिख रहा हूँ।गोलांग में Google क्लाउड स्टोरेज का परीक्षण कैसे करें?

उदाहरण के लिए, मेरे "पढ़ने" कोड लगता है:

client, err := storage.NewClient(ctx) 
if err != nil { 
    return nil, err 
} 
defer func() { 
    if err := client.Close(); err != nil { 
     panic(err) 
    } 
}() 
r, err := client.Bucket(BucketName).Object(id).NewReader(ctx) 
if err != nil { 
    return nil, err 
} 
defer r.Close() 
return ioutil.ReadAll(r) 

... जहां ctx ऐप्लिकेशन इंजन से एक संदर्भ है।

जब मैं एक इकाई परीक्षण में इस कोड को चलाने (aetest का प्रयोग करके), यह वास्तव में मेरे बादल भंडारण के लिए अनुरोध भेजता है; मैं इसके बजाय इसे हर्मेटिक रूप से चलाने के लिए चाहता हूं, aetest नकली डेटास्टोर कॉल की अनुमति देता है।

(संभावित रूप से question से संबंधित है, लेकिन यह पाइथन से संबंधित है, और लिंक github issue इंगित करता है कि यह एक अजगर-विशिष्ट तरीके से हल किया गया है)।

मैं यह कैसे कर सकता हूं?

+1

https://github.com/golang/mock? –

+0

@SachinNambiarNalavattanon मैं एक नकली भंडारण के लिए देख रहा हूँ; क्या आप सुझाव दे रहे हैं कि मैं इसे नकली करता हूं और नकली खुद को लागू करता हूं? –

उत्तर

2

पायथन विकास सर्वर पर क्लाउड स्टोरेज ब्लॉबस्टोर सेवा के साथ स्थानीय फाइलों का उपयोग करके नकल किया जाता है, यही कारण है कि टेस्टबेड (पायथन-विशिष्ट) के साथ ब्लॉबस्टोर स्टब का उपयोग करने का समाधान भी काम करता है। हालांकि गो रनटाइम पर क्लाउड स्टोरेज के लिए ऐसा कोई स्थानीय अनुकरण नहीं है।

के रूप में सचिन का सुझाव दिया, इकाई परीक्षण क्लाउड संग्रहण में जिस तरह से एक नकली उपयोग करने के लिए है। यह आंतरिक रूप से और अन्य रनटाइम पर किया गया है, जैसे कि node

2

एक दृष्टिकोण, यह भी सुझाव दिया here अपने GCS ग्राहक अपने डाउनलोडर एक ठूंठ जबकि इकाई परीक्षण के लिए बदली है करने की अनुमति है। सबसे पहले, एक इंटरफ़ेस को परिभाषित करें जो आप Google क्लाउड स्टोरेज लाइब्रेरी का उपयोग कैसे करते हैं, और उसके बाद अपने यूनिट परीक्षणों में नकली डेटा के साथ इसे पुन: कार्यान्वित करें।

कुछ इस तरह:

type StorageClient interface { 
    Bucket(string) Bucket // ... and so on, matching the Google library 
} 

type Storage struct { 
    client StorageClient 
} 

// New creates a new Storage client 
// This is the function you use in your app 
func New() Storage { 
    return Storage{ 
    client: realGoogleClient, 
    } 
} 

// NewWithClient creates a new Storage client with a custom implementation 
// This is the function you use in your unit tests 
func NewWithClient(client StorageClient) { 
    return Storage{ 
    client: client, 
    } 
} 

यह बॉयलरप्लेट पूरे 3 पार्टी एपीआई उपहास करने के लिए की एक बहुत कुछ किया जा सकता है, तो हो सकता है आप golang/mock या mockery के साथ उन लोगों mocks के कुछ उत्पन्न करके यह आसान बनाने के लिए सक्षम हो जाएगा ।

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