【发布时间】:2014-04-21 09:37:14
【问题描述】:
这是一个测试用例代码:
def test_interactive_session_set_language(monkeypatch):
"""Test user possibility to select language."""
events = [':ru-en', EOFError]
mock_input = mock.Mock(side_effect=events)
mock_set_language = mock.Mock()
monkeypatch.setattr('builtins.input', mock_input)
monkeypatch.setattr('pylingvo.interactive.pylingvo.client.set_language',
mock_set_language)
with pytest.raises(SystemExit):
pylingvo.interactive.start_session()
assert mock_set_language.call_count == 1
这是一个模块代码:
import pylingvo.client
import sys
import re
def start_session():
"""Start interactive session."""
while True:
try:
line = input('> ')
except (EOFError, KeyboardInterrupt):
sys.exit()
else:
command = dispatch(line)
COMMAND_MATCH_PATTERNS = [
('^:[a-z]{2}-[a-z]{2}$', pylingvo.client.set_language),
('^.*$', Exception),
]
COMMAND_MATCH_TABLE = [(re.compile(regex), command)
for regex, command in COMMAND_MATCH_PATTERNS]
def dispatch(command_name):
"""Convert interactive input to callable object."""
for pattern, command in COMMAND_MATCH_TABLE:
if pattern.match(command_name):
return command
此测试用例失败并显示以下消息:
E assert 0 == 1
E + where 0 = <Mock id='139806765631632'>.call_count
正如我们所见,模拟对象没有调用适当的测试运行。所以我的问题 请问如何正确设置mock属性才能通过这个测试用例?
【问题讨论】:
标签: python unit-testing mocking pytest