2011-11-11 33 views
7

我有一個需要寫入字符串到文件的記錄器類。所以,我有這樣的方法:模擬調用寫入()

def write_to_file(self, string): 
    self.__file_handle.write(string) 

請注意錯誤處理已被編輯出來。很明顯,我想在不寫入文件的情況下對其進行測試。因此通過Mock嘲笑。我已經看到this,它解釋瞭如何模擬打開,但它不幫助我在這裏 - 我打開__init__ file_handle。現在,我可以在setUp()中做到這一點,但mock_open似乎在setUp之後超出了範圍,因此在測試用例中沒有用處。

如何編寫測試方法來使用Mock測試write_to_file方法?

回答

1

我會開始在__init__中更改__file_handle。就好像你用具有.write簽名的任何模擬/僞造對象替換它,你可以測試寫入它的內容。

也許通過創建一個方法來設置__file_handle然後覆蓋此測試的方法?

+0

這是一種方法。但是也應該可以模擬.write()。 – Sardathrion

3

其實很簡單......

from mock import patch 

def setUp(self): 
    [...] 
    mock_file_handle = Mock() 
    with patch('__builtin__.open') as mock_file_handle: 
     self.sut = Logger() 
    [...] 

def test_write(self): 
    [...] 
    self.sut.write_message_to_file("ook?") 
    self.assertTrue(self.sut.file_handle.write.called) 
    self.assertTrue(self.sut.file_handle.flush.called) 
    [...] 

如果任何人有一個更好的解決方案,請讓我知道...