2012-10-26 18 views
1

我需要測試一個將移動文件的方法。我不想實際發生的文件移動操作,我只需要知道被測做出了正確的呼籲shutil.move如何修補shutil.move來測試某些方法

的方法是什麼修補shutil.move最好的方式,使該方法可以調用它沒有做的實際的文件操作?

我就是這麼做的,但很醜,我想使用模擬庫做到這一點:

real_move = ftp2email.shutil.move 
    move_operations = [] 
    def fake_move(src, dst): 
     move_operations.append((src, dst)) 
    ftp2email.shutil.move = fake_move 

    msg_id = '/path/to/message.xml' 
    self.ch.mark_message(msg_id) 
    self.assertEqual(move_operations, 
         [('/path/to/message.xml', '/path/to/archived/message.xml')]) 

    ftp2email.shutil.move = real_move 

回答

0

我使用Mock library

@mock.patch('%s.ftp2email.shutil.move' % __name__) 
def test_mark_message(self, move_mock): 

    self.ch.mark_message('/path/to/message.xml') 
    move_mock.assert_called_with('/path/to/message.xml', 
           '/path/to/archived/message.xml') 

這只是一個方式做它解決了這個問題,我也可以用一個「with語句」完成或調用模擬方法啓動和停止。

1

你可以嘗試使用mox,它可以做那種事。

mox recipes

def testFoo(self): 
    self.mox.StubOutWithMock(module_to_mock, 'FunctionToMock') 
    module_to_mock.FunctionToMock().AndReturn(foo) 

    self.mox.ReplayAll() 
    ... 
    self.mox.VerifyAll() 
相關問題