web-dev-qa-db-ja.com

python pytestがOSErrorで失敗することがある:出力のキャプチャ中にstdinからの読み取り

特定のunittestpytestで実行しているときに、このエラー(タイトルに記載されている)で失敗することがあり、スタックトレースから行で発生します

choice = input().lower()

コントロールがこのステートメントに到達すると、関数全体は次のようになります。

_def Prompt_to_activate(bear, printer):
    Prompt_TO_ACTIVATE_STR = ('program has found {} to be useful '
                              'based of dependencies discovered from your '
                              'project files. \n Would you like to activate '
                              'it? (y/n)')
    printer.print(Prompt_TO_ACTIVATE_STR)

    choice = input().lower()

    if choice.startswith('y'):
        return True
    Elif choice.startswith('n'):
        return False
    else:
        return Prompt_to_activate(bear, printer)
for i in range(0, 3):
    a = i
print(a)
_

そのステートメントの前にtime.sleep(x)を追加しようとしましたが、それはそれを修正しません。これが起こっている正確な理由と修正方法を誰かに教えてもらえますか?

9

input() はインタラクティブな関数なので、自動テストで戻り値をモックアウトする必要があります。このようなもの:

def test_Prompt(capsys, monkeypatch):
    monkeypatch.setattr('path.to.yourmodule.input', lambda: 'no')
    val = Prompt_to_activate(bear=..., printer=...)
    assert not val
6
wim