我有两个函数都用@defer.inlineCallbacks
修饰符包装。在
对于测试,我模拟了各种东西,包括save_to_db()
函数。在
@defer.inlineCallbacks
def save_to_db(obj): # mocked for test.
raise Exception('Oh Noe!')
@defer.inlineCallbacks
def create_contact():
xero = yield get_xero_client()
data = {
# <contact info>
}
# Create a new contact
response = yield deferToThread(xero.contacts.put, data)
obj = {
# some data extracted from response
}
yield save_to_db(obj)
但是当我跑步时:
$ trial tests.TestContactCreation
实际调用了save_to_db()
,正如预期的那样,它引发了一个异常。在
Traceback (most recent call last):
File "<file_path>/logic.py", line 93, in save_to_db
raise Exception('Oh Noe!')
exceptions.Exception: Oh Noe!
我不知道为什么!我试图使用pdb
进行调试。在
import pdb; pdb.set_trace()
在我们使用deferToThread()
之前,save_to_db()
似乎被正确地模拟了
(Pdb) save_to_db
<MagicMock name='save_to_db' id='4404276240'>
但是在我使用deferToThread()
的行之后
(Pdb) save_to_db
<function save_to_db at 0x111c6f488>
save_to_db()
不再被嘲笑!我可以绕过这个问题的唯一方法是我也嘲笑deferToThread()
还有更好的选择吗?如有任何提示,我们将不胜感激。非常感谢。在
我遇到了相同的问题;
@mock.patch(...)
装饰器在与@inlineCallbacks
装饰器结合使用时不起作用(也就是说,它实际上并不模拟所需的东西)。在对我有用的是通过上下文管理器来嘲笑:
这对你有用吗?在
相关问题 更多 >
编程相关推荐