测试Django模拟 - 检查函数/方法调用

问题描述:

我想检查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

您可以使用补丁作为装饰

@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