【发布时间】:2016-11-16 16:16:40
【问题描述】:
我正在我的应用程序中编写测试,以测试方法是否被调用。这是在 Python 3.4.3 和 pytest-2.9.2 中运行的。我是 PyTest 的新手,但对 RSpec 和 Jasmine 非常熟悉。我不确定如何设置测试,以便测试是否调用了 imaplib.IMAP4_SSL。
我的应用结构:
/myApp
__init__.py
/shared
__init__.py
email_handler.py
/tests
__init__.py
test_email_handler.py
email_handler.py
import imaplib
def email_conn(host):
mail = imaplib.IMAP4_SSL(host)
return mail;
到目前为止我的测试有什么: test_email_handler.py
import sys
sys.path.append('.')
from shared import email_handler
def test_email_handler():
email_handler.email_conn.imaplib.IMAP4_SSL.assert_called_once
这显然失败了。如何设置此测试以测试是否调用了 imaplib.IMAP4_SSL?或者有没有更好的方法在我的应用中设置测试套件,以便更有效地支持测试?
【问题讨论】:
-
你可能想看看pytest-mock。
-
@das-g 是的,这很有趣。但是如何申请这个用例?我认为这更像是一个间谍而不是一个模拟。我可以利用这个库来解决这个问题吗?
-
尽管有它们的名字,但 pytest-mock(以及
unittest.mock和mock包)提供的替代对象是 xUnit Patterns.com calls "Test Spy":它们捕获对它们的调用(“被测系统”)以供以后验证。 (不过,xUnit Patterns.com 所称的“模拟对象”也适用于您的情况。另请参阅 Mocks Aren't Stubs。)
标签: python-3.x pytest