0
以下のエラーが発生する理由についての洞察を探しています。問題がpytestであるかどうか疑問に思っていますか?getpassモジュールのテスト: 'パスワード入力がエコーされる可能性があります'
私のアプリケーションでは問題なくgetpassを使用しています。しかし、私はテストの世界では初めてです。
common.py:
def username_password():
"""Get login credentials"""
# show current windows user
print("\nThe current windows user is {}\n".format(getuser()))
username = getpass("Username: ")
password = getpass("Password: ")
return username, password
test_common.py:
from unittest.mock import patch
from common import username_password
@patch("getpass.getpass")
@patch("getpass.getuser")
def test_username_password(getuser, getpass):
getuser.return_value = "Me"
getpass.return_value = "xxx"
assert username_password() == ("Me", "xxx")
コマンドライン:
py.test test_common.py --cov --cov-report term-missing
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: C:\Users\JB\Desktop\Coding\Bot\Bot_tests, inifile:
plugins: cov-2.5.1
collected 17 items
test_common.py ....F..x.........
================================== FAILURES ===================================
___________________________ test_username_password ____________________________
getuser = <MagicMock name='getuser' id='1759491735280'>
getpass = <MagicMock name='getpass' id='1759491732424'>
@patch("getpass.getpass")
@patch("getpass.getuser")
def test_username_password(getuser, getpass):
getuser.return_value = "Me"
getpass.return_value = "xxx"
> u, p = username_password()
test_common.py:65:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
..\Bot\common.py:29: in username_password
username = getpass("Username: ")
..\..\environments\ipython_env\Anaconda3\lib\getpass.py:101: in win_getpass
return fallback_getpass(prompt, stream)
..\..\environments\ipython_env\Anaconda3\lib\getpass.py:127: in fallback_getpass
return _raw_input(prompt, stream)
..\..\environments\ipython_env\Anaconda3\lib\getpass.py:147: in _raw_input
line = input.readline()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <_pytest.capture.DontReadFromInput object at 0x00000199A8BD37F0>
args =()
def read(self, *args):
> raise IOError("reading from stdin while output is captured")
E OSError: reading from stdin while output is captured
..\..\environments\ipython_env\Anaconda3\lib\site-packages\_pytest\capture.py:433: OSError
---------------------------- Captured stdout call -----------------------------
The current windows user is JB
---------------------------- Captured stderr call -----------------------------
C:\Users\JB\Desktop\Coding\environments\ipython_env\Anaconda3\lib\getpass.py:101: GetPassWarning: Can not control echo on the terminal.
return fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
Username:
=============== 1 failed, 15 passed, 1 xfailed in 0.50 seconds ================
どれをで感謝してください。
システムが私に投稿の機能を与え、より詳細な情報を要求することを拒否することを希望しています。私は追加するものは何もありません。
'getuser'は、システムログイン名の環境変数をチェックします。その機能はあなたが提案した方法で使用することはできません。 –
私は答えを広げました。 – phd