2011-11-11 8 views
7

ファイルに文字列を書き込む必要があるロガークラスがあります。だから私はこういう方法がある:write()への模擬呼び出し

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を設定し、このテストのためのメソッドを上書きするメソッドを作成しますか?

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) 
    [...] 

誰もがよりよい解決策を持っている場合

は、私に知らせてください

+0

これは片道です。しかし、.write()も同様に模倣することが可能でなければなりません。 – Sardathrion

3

シンプル本当に... ...私はここにGoogleからの到達

関連する問題