Daw*_*ski 9 python python-3.x python-mock python-unittest python-3.6
我有代码和测试文件:
代码.py
class Code:
def do_something_inside(self, a, b, c):
return a-b-c
def do_something(self, b, c):
self.do_something_inside(30, b, c)
Run Code Online (Sandbox Code Playgroud)
测试文件
import unittest
import unittest.mock as mock
from code import Code
class TestStringMethods(unittest.TestCase):
def setUp(self):
self.code = Code()
def do_something_inside_stub(self, a, b, c):
return a+b+c
@mock.patch('code.Code.do_something_inside', new_callable=do_something_inside_stub)
def test_add(self):
self.assertEquals(self.code.do_something(10, 5), 45)
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
我想使用 do_something_inside_stub 模拟 do_something_inside 方法,但执行失败:
E
======================================================================
ERROR: test_add (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.6/unittest/mock.py", line 1171, in patched
arg = patching.__enter__()
File "/usr/lib/python3.6/unittest/mock.py", line 1293, in __enter__
new = Klass(**_kwargs)
TypeError: do_something_inside_stub() missing 4 required positional arguments: 'self', 'a', 'b', and 'c'
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)
我不知道如何将参数从 mock.patch 传递给 new_callable。
new_callable 需要一个从 Mock 继承的类,它将为此模拟创建其对象。您正在寻找的功能是 side_effect。参考:https : //docs.python.org/3/library/unittest.mock.html#the-mock-class
使用以下代码:
@mock.patch('code.Code.do_something_inside', side_effect=do_something_inside_stub)
def test_add(self, do_something_inside_mock):
do_something_inside_mock.assert_called
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4695 次 |
| 最近记录: |