2014-09-29 95 views
0

我想檢查do_a調用do_b。我在做這樣的:測試Django模擬 - 檢查函數/方法調用

代碼:

def do_a(...): 
    ... 
    do_b(...) 
    ... 

測試:

def test_do_a(self): 
     ... 

     with patch('...do_b', new_callable=do_nothing()) as mock_do_b: 
      do_a(...) 

     mock_do_b.assert_called_once_with(...) 

而且do_nothing:

def do_nothing(): 
    pass 

這是工作正常,但我不得不使用do_nothing(),我覺得哈克。有沒有辦法做同樣的測試沒有額外的無用函數do_nothing()?

+1

你可以使用,而不是一個可調用'拉姆達拉姆達:TRUE'但拉姆達似乎更hackish的;) – 2014-09-29 08:10:13

+0

是的,我想到了這一點。我可能只是寫patch_with_nothing(...) – 2014-09-29 23:20:08

回答

1

您可以使用補丁作爲裝飾

@patch('...do_b') 
def test_do_a(self, mock_do_b): 
    do_a(...) 
    mock_do_b.assert_called_once_with(...) 
+0

謝謝,但不會刪除do_nothing()或lambda:True的需要。 – 2014-09-29 23:20:51

+0

也許這是一個版本問題 - 只是添加相同的問題,這是工作。此外,'return_value'而不是'new_callable'也能做到這一點。 – 2016-09-19 01:57:28