मैं कोई विशेषज्ञ हूँ, लेकिन मैं इसे जाने दूँगा । पहले रिफैक्टरिंग का थोड़ा सा: उन्हें कार्यात्मक बनाएं (सभी वर्ग सामग्री को हटा दें), अनियंत्रित चीजों को हटा दें। यह परीक्षण करने के लिए यह बहुत आसान बनाना चाहिए। यदि आप वास्तव में इसे कक्षा में चाहते हैं तो आप कक्षाओं को इन कार्यों को हमेशा कॉल कर सकते हैं।
def pass_file_name(base_filename, exists):
"""return a list of filenames that exist
based upon `base_filename`.
use `os.path.isfile` for `exists`"""
log_files = []
if exists(base_filename):
log_files.append(base_filename)
for i in range(1, 8):
filename = base_filename + "." + str(i)
if exists(filename):
log_files.append(filename)
return log_files
def read_log_files (self, log_files):
"""read and parse each line from log_files
use `pass_file_name` for `log_files`"""
log_entrys = []
for filename in log_files:
with open(filename) as myfile:
for line in myfile:
log_entrys.append(line.split())
return log_entrys
अब हम आसानी से exists
के लिए एक कस्टम समारोह में पारित करके pass_file_name
परीक्षण कर सकते हैं।
class Test_pass_file_name(unittest.TestCase):
def test_1(self):
"""assume every file exists
make sure all logs file are there"""
exists = lambda _: True
log_files = pass_file_name("a", exists)
self.assertEqual(log_files,
["a", "a.1", "a.2", "a.3",
"a.4", "a.5", "a.6", "a.7"])
def test_2(self):
"""assume no files exists
make sure nothing returned"""
exists = lambda _: False
log_files = pass_file_name("a", exists)
self.assertEqual(log_files, [])
# ...more tests here ...
हम os.path.isfile
काम करता है मान लेते हैं जैसा कि हम पहले समारोह की बहुत अच्छी परीक्षण मिल गया है चाहिए। यद्यपि आप हमेशा परीक्षण कर सकते हैं वास्तव में कुछ फाइलें बनाते हैं तो pass_file_name
exists = os.path.isfile
पर कॉल करें।
दूसरा परीक्षण करना कठिन है; मुझे बताया गया है कि सर्वश्रेष्ठ (इकाई) परीक्षण नेटवर्क, डेटाबेस, जीयूआई या हार्ड ड्राइव को स्पर्श नहीं करते हैं। तो शायद कुछ और रिफैक्टरिंग इसे आसान बना देगा। खुले खुले काम कर सकते हैं; या वास्तव में परीक्षण समारोह में कुछ लंबी फ़ाइल यहाँ लिखते थे सकता है और उन में पढ़ें।
How do I mock an open used in a with statement (using the Mock framework in Python)?
स्रोत
2010-02-17 11:43:12
"... इसलिए यह फ़ाइल नाम या फ़ाइल जैसी वस्तु ले सकता है" मैं यह कैसे कर सकता हूं? Str (एक फ़ाइल नाम) के उदाहरण के लिए जांचें, अन्यथा मान लें कि यह एक आईओ ऑब्जेक्ट है? – Symmitchry