我正在尝试使用 python mock 测试一个函数。
foo.py
session = scoped_session(sessionmaker(bind=db_state.engine))
@use_kwargs({
'user_id': fields.Integer(location='json', required=True)
})
def create_user(user_id):
with session as s:
try:
result = user_dao.create_user(s, user_id)
return json.dumps(result), 200, {'Content-Type': 'application/json; charset=utf-8'}
except SQLAlchemyError:
result = {"Fatal": "Id not found"}
return json.dumps(result), 404, {'Content-Type': 'application/json; charset=utf-8'}
这种方法的单元是:
测试.py
class CreateUserTest(unittest.TestCase):
@patch("user_dao.create_user")
@patch("flask.request")
def test_create_user(self, mock_request, mock_create_user):
mock_create_user.side_effect = SQLAlchemyError
response, code, content = foo.create_user()
multiple assert statements go here.
堆栈跟踪在这里没有多大帮助。可能是我错过了明显的。这是它
Traceback (most recent call last):
File "/binlib/python2.7/site-packages/mock/mock.py", line 1305, in patched
return func(*args, **keywargs)
File "/some/path/test.py", line 6, in test_create_user
response, code, content = foo.create_user()
File "/bin/lib/python2.7/site-packages/webargs-1.3.4-py2.7.egg/webargs/core.py", line 434, in wrapper
return func(*args, **kwargs)
File "/some/path/foo.py", line 8, in create_user
result = user_dao.create_user(s, user_id)
File "/bin/lib/python2.7/site-packages/mock/mock.py", line 1062, in __call__
return _mock_self._mock_call(*args, **kwargs)
File "/bin/lib/python2.7/site-packages/mock/mock.py", line 1118, in _mock_call
raise effect
TypeError: __init__() takes at least 4 arguments (1 given)
我确实检查了 mock.py 的代码,但无法发现这里出了什么问题。