Python unittest和mock:检查函数是否被调用,然后停止测试

时间:2016-07-14 18:28:03

标签: python unit-testing mocking

假设我想确保某些标志等被正确分派,以便在我的库深处,一个特定的函数被调用:

high_order_function_call(**kwargs) 内心深处包含library_function_call() 我想确保实际调用它。

为此提供的典型示例使用mock.patch

@mock.patch('library')
def test_that_stuff_gets_called(self, mock_library):
    high_order_function_call(some_example_keyword='foo')
    mock_library.library_function_call.assert_called_with(42)

现在,在这种情况下,我必须等待high_order_function_call中所有内容的完整执行。如果我希望执行停止并在mock_library.library_function_call到达后立即跳回单元测试怎么办?

1 个答案:

答案 0 :(得分:1)

您可以尝试在调用中使用异常引发的副作用,然后在测试中捕获该异常。

from mock import Mock, patch
import os.path

class CallException(Exception):
    pass

m = Mock(side_effect=CallException('Function called!'))
def caller_test():
    os.path.curdir()
    raise RuntimeError("This should not be called!")

@patch("os.path.curdir", m)
def test_called():
    try:
        os.path.curdir()
    except CallException:
        print "Called!"
        return
    assert "Exception not called!"

if __name__ == "__main__":
    test_called()