Python中mock.call的常用方法和技巧总结
发布时间:2024-01-08 03:29:14
在Python中,mock.call是mock库中一个非常有用的方法,它可以帮助我们断言函数调用的参数是否符合预期。下面是一些常用的方法和技巧总结,并且附带了使用例子。
1. 使用assert_called_with()方法来断言函数调用的参数是否和预期一致。
from unittest import mock
def test_func():
obj = mock.Mock()
obj.do_something(10, 20)
obj.do_something.assert_called_with(10, 20)
2. 使用assert_called_once_with()方法来断言函数只被调用了一次,并且参数符合预期。
from unittest import mock
def test_func():
obj = mock.Mock()
obj.do_something(10, 20)
obj.do_something.assert_called_once_with(10, 20)
3. 使用assert_called()方法来断言函数被调用过。
from unittest import mock
def test_func():
obj = mock.Mock()
obj.do_something(10, 20)
assert obj.do_something.called
4. 使用assert_not_called()方法来断言函数没有被调用过。
from unittest import mock
def test_func():
obj = mock.Mock()
assert not obj.do_something.called
5. 使用assert_has_calls()方法来断言函数多次调用的参数是否符合预期。
from unittest import mock
def test_func():
obj = mock.Mock()
obj.do_something(10, 20)
obj.do_something(30, 40)
obj.do_something.assert_has_calls([mock.call(10, 20), mock.call(30, 40)])
6. 使用side_effect属性来指定函数被调用时的返回值。
from unittest import mock
def test_func():
obj = mock.Mock()
obj.do_something.side_effect = [1, 2, 3]
assert obj.do_something() == 1
assert obj.do_something() == 2
assert obj.do_something() == 3
7. 使用side_effect属性来触发函数调用时的异常。
from unittest import mock
def test_func():
obj = mock.Mock()
obj.do_something.side_effect = Exception("Error")
try:
obj.do_something()
assert False # 如果没有触发异常,则测试失败
except Exception as e:
assert str(e) == "Error"
8. 使用side_effect属性来定义函数被调用时的副作用。
from unittest import mock
def test_func():
obj = mock.Mock()
def side_effect_func(arg):
return arg * 2
obj.do_something.side_effect = side_effect_func
assert obj.do_something(5) == 10
总结:mock.call是Python中一个非常有用的方法,它可以帮助我们断言函数调用的参数是否符合预期。本文介绍了一些常用的方法和技巧,包括assert_called_with()、assert_called_once_with()、assert_called()、assert_not_called()、assert_has_calls()、side_effect等。这些方法和技巧可以帮助我们写出更加可靠和健壮的单元测试。
