欢迎访问宙启技术站
智能推送

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等。这些方法和技巧可以帮助我们写出更加可靠和健壮的单元测试。