2013-12-08 32 views
1

我想了解如何使用單元測試框架蟒模擬蟒蛇的unittest模塊進行raw_input()2

我有一段代碼,看起來像這樣 -

while True: 
    filename = raw_input('Enter file') 
    if os.path.exists(filename): 
     break 
    else: 
     print "That file does not exist" 
return filename 

燦有人幫我開發單元測試模塊來測試這個。我問,爲了這個問題,以瞭解如何使用單元測試(我想學習TTD:測試驅動開發)

到目前爲止,我想出這個 ... 進口單元測試 進口os.path中

類TestFunctions(unittest.TestCase生成):

def setUp(self): 
    self.prompt = 'Enter filename: ' 

def test_get_file(self): 

    # TODO make sure empty filename argument requests for new filename 
    filename = find_author.get_valid_filename(self.prompt) 
    self.assertTrue(<EXPRESSION?>) 

    # TODO make sure valid filename returns the "filename" 
    # TODO make sure invalid filename prompts that file does not exit and requests new filename 

如果 == 「主要」: unittest.main()

回答

1

一個簡單的方法就是用猴子補丁raw_input

例如,在您的測試模塊(因爲你應該分裂您被測定者和測試者到單獨的文件),你可能有:

import module_being_tested 
... run tests ... 

在你運行你的測試,你可以簡單地做:

import module_being_tested 

def mock_raw_input(s): 
    return 'data.txt' 

module_being_tested.raw_input = mock_raw_input 

... run tests .... 

現在,當您的被測試者模塊調用raw_input時,它實際上會調用mock_raw_input,並且總是會返回'data.txt'

+0

謝謝!現在我明白了! – cafed00d