在Python中,side_effect是一个非常有用的功能,通常与unittest.mock模块中的MagicMock或patch一起使用。它允许你在测试过程中模拟函数的行为,并定义该函数在被调用时应该产生的副作用。 基础概念 side_effect可以是一个函数、一个可调用对象或者一个异常。当模拟的函数被调用时,side_effect指定的行为将被执行。 相关优...
unittest.mock是一个用于在Python中进行单元测试的库,Mock翻译过来就是模拟的意思,顾名思义这个库的主...
with mock.patch('__main__.add') as mock_add: mock_add.side_effect = lambda x, y: x + y + 1 result = add(2, 3) self.assertEqual(result, 6) 在这个例子中,我们使用 @mock.patch 修饰器来创建一个 Mock 对象,并使用 side_effect 属性来定制 Mock 的行为。在这个例子中,我们创建了一个 ...
mock_obj.return_value =3mock_obj.side_effect = print_test_infoassertfunc_to_test() ==3deftest_func_to_test__context():withmock.patch('pack1.my_module.verbose_adder')asmock_obj: mock_obj.return_value =3mock_obj.side_effect = print_test_infoassertfunc_to_test() ==3 可以看到,mock....
• 我们需要使用unittest中的mock.patch,即允许我们对某些模块的返回值进行模拟,比如这里我们对我们依赖的mymodule.os进行了Mock • 在测试用例中,当调用rm时,rm会使用我们Mock好的库进行调用,并不会触发真正的删除 • 而在断言中,我们只需要证明os库被调用,且参数与我们传入一致即证明测试通过 • 当然对于...
值得注意的是,mock.Mock(return_value=mock_result)是一个对象,但为什么system_b.send_request = mock.Mock(return_value=mock_result)返回的是数据而不是对象的其他属性跟方法呢,在这里,是因为mock对象中有一个side_effect属性,如果这个属性为None,就会将return_value设置的值返回。
mock 是最初,也是最基本的一个函数,它的任务就是模拟某个当前模块的函数。 patch - 补丁方式模拟 有些函数可能不属于你,你也不在意它的内部实现而只是想调用这个函数然后得到结果而已,这种时候就可以用 patch 方式来模拟。 比如我有一个模块文件叫 linux_tool.py ,然后里面有 2 个函数,其中一个 send_shell_...
side_effect参数和return_value是相反的。它给mock分配了可替换的结果,覆盖了return_value。简单的说,一个模拟工厂调用将返回side_effect值,而不是return_value。 所以,设置side_effect参数为Count类add()方法,那么return_value的作用失效。 result = count.add(8, 8) ...
(self):# 初始化被测函数类实例sub=SubClass()# 创建一个mock对象 return_value代表mock一个数据# 传递side_effect关键字参数, 会覆盖return_value参数值, 使用真实的add方法测试sub.add=Mock(return_value=15,side_effect=sub.add)# 调用被测函数result=sub.add(5,5)# 断言实际结果和预期结果self.assert...
1.1 Mock 一个方法 1.2 Mock 一个对象里面的方法 分别给出了普通写法和注解写法,以及 side_effect 关键参数的效果案例。 1.3 Mock 每次调用返回不同的值 1.4 Mock 抛出异常的方法 1.5 Mock 多个方法 2. pytest-mock 如果项目本身使用的框架是 pytest,则 Mock 更建议使用 pytest-mock 这个插件,它提供了一...