2015-06-19 55 views
2

所以我剛開始使用模擬庫來執行一些單元測試。但碰到了一個對我來說確實很神祕的問題。布爾函數的Python嘲弄

當我調用下面的代碼時,stream.open()總是計算爲True,因爲它似乎是返回Mock對象而不是False值。

測試代碼

@patch('module.lib.stream') 
def test_error_raised(self, mock_stream): 
    mock_stream.open.return_value = False 
    self.assertRaises(IOError, get_query, 618) 

被調用函數

def get_query(id): 
    id = str(id) 
    fpath = os.path.join(
     path, '{0}.pdf'.format(id)) 
    stream = stream() 
    if not stream.open(fpath): 
     raise IOError("No file found") 
    list = map(foo, stream.GetData()) 
    first_entry = list[0] 
    target_entries = list[1:] 
    return first_entry, target_entries 

是否有辦法妥善嘲笑這個功能呢?

回答

1

從你的功能來看,stream似乎是一個類。

由於您創建了該類的實例,然後您在該實例上調用了open方法,因此您需要在測試函數中執行mock_stream.return_value.open.return_value = False

+0

這正是我的問題。非常感謝 – badisa