Cha*_*too 5 python unit-testing mocking
我正在为我一直在开发的库编写一些测试。它具有以下结构。
lib
|---__init__.py
|---mod1.py
|---mod2.py
|---mod3.py
tests
|---__init__.py
|---test_mod1.py
Run Code Online (Sandbox Code Playgroud)
在测试文件夹的init .py 中,我将库的路径添加到sys.path变量中,并进行了所有导入。IE from lib import mod1, mod2, mod3。在test_mod1.py中我做了from . import mod1
现在的问题是我想修补mod1.py中的一个函数。我尝试过mock.patch('mod1.func1'),但没有成功,然后我也尝试过mock.patch('.mod1.func1'),也没有成功。如何确定补丁的目标?
您应该指定要模拟的函数所在的位置。
在这种情况下,iffunc1中的内容如下lib.mod1:
def func1(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
那么以下应该有效:
@mock.patch('lib.mod1.func1', mock.Mock(return_value=3))
def test_mod1():
result = mod1.func1(100, 200)
assert result == 3 # not 300 because we mocked it
Run Code Online (Sandbox Code Playgroud)
您还可以按如下方式实现:
@mock.patch('lib.mod1.func1')
def test_mod1(mocked_func1):
mocked_func1.return_value = 3
result = mod1.func1(100, 200)
assert result == 3 # not 300 because we mocked it
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1524 次 |
| 最近记录: |