Cla*_*n L 6 python mocking python-unittest
我有一段代码,如下所示:
# file1.py
from module import Object
def method():
o = Object("param1")
o.do_something("param2")
Run Code Online (Sandbox Code Playgroud)
我的单元测试如下所示:
@patch("file1.Object")
class TestFile(unittest.TestCase):
def test_call(self, obj):
...
Run Code Online (Sandbox Code Playgroud)
我可以obj.assert_called_with()在单元测试中验证是否使用某些参数调用了构造函数。是否可以验证是否obj.do_something使用某些参数进行了调用?我的直觉是否定的,因为模拟完全封装在对象中,但我希望可能有其他方法。
您可以这样做,因为参数被传递给模拟对象。
这应该有效:
@patch("file1.Object")
class TestFile:
def test_call(self, obj):
method()
obj.assert_called_once_with("param1")
obj.return_value.do_something.assert_called_once_with("param2")
Run Code Online (Sandbox Code Playgroud)
obj.return_value是Object实例(它是MagickMock具有Object规范的对象),并且do_something是使用给定参数调用的该对象中的另一个模拟。
只要您只是将参数传递给模拟对象,模拟就会记录下来,您可以检查它。您所没有的是实际函数调用的任何副作用 - 因此,如果原始函数do_something调用另一个函数,则无法检查这一点。