2016-12-19 4 views
5

में एक संपूर्ण मॉड्यूल का मॉक करें मेरे पास एक ऐसा एप्लिकेशन है जो पीईपीआई से मॉड्यूल आयात करता है। मैं उस एप्लिकेशन के स्रोत कोड के लिए unittests लिखना चाहता हूं, लेकिन मैं उन परीक्षणों में पीईपीआई से मॉड्यूल का उपयोग नहीं करना चाहता हूं।
मैं इसे पूरी तरह से मॉक करना चाहता हूं (परीक्षण मशीन में वह पीपीपीआई मॉड्यूल नहीं होगा, इसलिए कोई भी आयात विफल हो जाएगा)।पाइथन

वर्तमान में, जब भी मैं कक्षा को लोड करने का प्रयास करता हूं, मैं unittests में परीक्षण करना चाहता हूं, मुझे तुरंत आयात त्रुटि मिलती है। तो मैंने शायद

try: 
    except ImportError: 

और उस आयात त्रुटि को पकड़ने के बारे में सोचा, तो command_module.run() का उपयोग करें। यह बहुत जोखिम भरा/बदसूरत लगता है और मैं सोच रहा था कि कोई और तरीका है या नहीं।

एक और विचार उस पीपीपीआई मॉड्यूल को लपेटने के लिए एडाप्टर लिख रहा था, लेकिन मैं अभी भी उस पर काम कर रहा हूं।

यदि आप किसी भी तरह से जानते हैं कि मैं एक संपूर्ण पायथन पैकेज का नकल कर सकता हूं, तो मैं इसकी बहुत सराहना करता हूं। धन्यवाद।

उत्तर

2

यदि आप पायथन आयात प्रणाली में खोदना चाहते हैं, तो मैं अत्यधिक David Beazley's talk की अनुशंसा करता हूं।

आपके विशिष्ट प्रश्न के लिए, यहां एक उदाहरण है जो मॉड्यूल का परीक्षण करता है जब इसकी निर्भरता गुम होती है।

bar.py - मॉड्यूल आप परीक्षण करना चाहते जब my_bogus_module

from my_bogus_module import foo 

def bar(x): 
    return foo(x) + 1 

mock_bogus.py याद आ रही है - कि एक नकली मॉड्यूल

from mock import Mock 
import sys 
import types 

module_name = 'my_bogus_module' 
bogus_module = types.ModuleType(module_name) 
sys.modules[module_name] = bogus_module 
bogus_module.foo = Mock(name=module_name+'.foo') 

test_bar.py लोड होगा अपने परीक्षण के साथ में एक फ़ाइल - परीक्षण bar.py जब my_bogus_module उपलब्ध नहीं है

import unittest 

from mock_bogus import bogus_module # must import before bar module 
from bar import bar 

class TestBar(unittest.TestCase): 
    def test_bar(self): 
     bogus_module.foo.return_value = 99 
     x = bar(42) 

     self.assertEqual(100, x) 

आपको यह जांच कर थोड़ा सा सुरक्षित बनाना चाहिए कि my_bogus_module वास्तव में उपलब्ध नहीं है जब आप अपना परीक्षण चलाते हैं। आप pydoc.locate() विधि भी देख सकते हैं जो कुछ आयात करने का प्रयास करेगा, और None वापस विफल होने पर वापस लौटाएगा। ऐसा लगता है कि यह एक सार्वजनिक विधि है, लेकिन यह वास्तव में दस्तावेज नहीं है।

+0

यह वही है जो मैं ढूंढ रहा था। धन्यवाद! – TzurEl