Cod*_*bee 5 python unit-testing mocking pytest python-mock
我目前拥有的是:
def some_method():
some_obj = some_other_method()
# This is what I want to mock return value of:
some_obj.some_obj_some_method()
@patch('some_package.some_other_method')
def test_some_stuff(some_other_method_patch):
some_other_method_patch.return_value = SomeObject()
Run Code Online (Sandbox Code Playgroud)
我怎样才能将 some_obj.some_obj_some_method() 返回值设置为 False?
patch('some_package.some_other_method')将some_other_method用一个Mock. 现在你需要替换some_obj_some_method这个mock的方法的返回值:
mock.return_value.some_obj_some_method.return_value = False
Run Code Online (Sandbox Code Playgroud)
完整示例:
# some_package.py
class SomeObject:
def some_obj_some_method(self):
raise RuntimeError()
def some_other_method():
return SomeObject()
def some_method():
some_obj = some_other_method()
# This is what you want to mock return value of:
return some_obj.some_obj_some_method()
Run Code Online (Sandbox Code Playgroud)
测试:
from unittest.mock import patch
from some_package import SomeObject, some_method
@patch('some_package.some_other_method')
def test_some_stuff(function_mock):
function_mock.return_value.some_obj_some_method.return_value = False
assert not some_method()
Run Code Online (Sandbox Code Playgroud)
测试将按原样通过,将在RuntimeError不打补丁的情况下引发 a并在没有该行的情况下使断言失败,function_mock.return_value.some_obj_some_method.return_value = False因为some_method只会返回一个Mocknever False。
| 归档时间: |
|
| 查看次数: |
5670 次 |
| 最近记录: |