2015-09-11 86 views
0

我試圖模擬bulk_createsave幹運行。 我這在本質上並創建如下代碼:嘲笑Model.objects.bulk_create和Model.save()

@mock.patch.object(SomeModel.objects, 'bulk_create') 
@mock.patch.object(SomeModel, 'save') 
def a_dry_run(mocked_bulk_create, mocked_save): 

    def print_bulk(obj_list): 
     print 'doing bulk_create' 
     for obj in obj_list: 
      print obj 

    def print_save(instance): 
     print 'doing save' 
     print instance 

    mocked_bulk_create.side_effect = print_bulk 
    mocked_bulk_create.return_value = True 
    mocked_save.side_effect = print_save 
    mocked_save.return_value = True 

的問題是,當我做bulk_create而不是print_bulk它執行print_save。我該如何解決這個問題,或者有一個更清潔的方法來做到這一點?

回答

1

參數的順序應該顛倒。正如你可以在Quick Guide處看到的,其中描述patch傳遞給該函數的模擬參數的順序從下到上依次爲patch的裝飾器。

在你的情況下簡單地改變補丁順序或類似

def a_dry_run(mocked_save, mocked_bulk_create): 
函數簽名