2013-05-01 5 views
7

मैं नोसेटेट्स का उपयोग कर रहा हूं और दो अलग-अलग फाइलों में मेरे पास दो परीक्षण हैं। व्यक्तिगत रूप से चलाने पर दोनों ठीक चलते हैं, लेकिन जब एक साथ चलते हैं, तो पहले टेस्ट से नकली दूसरे टेस्ट में परिणाम को गड़बड़ कर देती है। मैं कैसे बीमा करूं कि एक परीक्षण समारोह समाप्त होने के बाद सभी मोजे/पैच रीसेट हो जाते हैं ताकि मुझे हर रन पर एक साफ परीक्षण मिल सके?पायथन - परीक्षण के दौरान नकली अनमॉक/रीसेट कैसे करें?

यदि संभव हो, तो मेरे परीक्षणों के माध्यम से समझाया जाएगा विशेष रूप से सराहना की जाएगी। मेरा पहला परीक्षण की तरह दिखता है:

def test_list_all_channel(self): 
    from notification.models import Channel, list_all_channel_names 
    channel1 = Mock(); 
    channel2 = Mock(); 
    channel3 = Mock(); 
    channel1.name = "ch1" 
    channel2.name = "ch2" 
    channel3.name = "ch3" 
    channel_list = [channel1, channel2, channel3] 
    Channel.all = MagicMock() 
    Channel.all.return_value = channel_list 
    print Channel 
    channel_name_list = list_all_channel_names() 
    self.assertEqual("ch1", channel_name_list[0]) 
    self.assertEqual("ch2", channel_name_list[1]) 
    self.assertEqual("ch3", channel_name_list[2]) 

और मेरे दूसरे टेस्ट है:

def test_can_list_all_channels(self): 
    add_channel_with_name("channel1") 
    namelist = list_all_channel_names() 
    self.assertEqual("channel1", namelist[0]) 

लेकिन() Channel.all से वापसी मान अभी भी पहले समारोह से सूची में सेट कर दिया जाता तो मैं मिलता है ` "ch1" "channel1" के बराबर नहीं है। कोई सुझाव? बहुत धन्यवाद!

उत्तर

10

http://www.voidspace.org.uk/python/mock/patch.html

को फिर से देखें अपने परीक्षण के शुरू में आप अपने पैच शुरू करने और अंत में चलाने

p = patch("Channel.all", new=MagicMock(return_value=channel_list)) 
p.start() 

:

p.stop() 

यह सुनिश्चित होगा कि आपके mocks लिए अलग किए गए कसौटी।

+0

पैच के बाहर नकली कार्यों के बारे में क्या? ऐसा करने का एकमात्र तरीका उनसे शुरू करने के लिए पैच करना है? – golmschenk

+0

हां। मैं अनजान ढांचे में निर्मित का उपयोग करने की सिफारिश करता हूं। इस तरह आप अपने पैच बनाने/नष्ट करने के लिए setUp और tearDown विधियां रख सकते हैं। –

+0

hi @ jjia6395 ऐसा लगता है कि एक कोष्ठक गायब है या एक बहुत अधिक है ?? –

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