The PyTest documentation states that stdin is redirected to null as no-one will want to do interactive testing in a batch test context. This is true, but interactive is not the
Maybe you could run your script as a subprocess
? In Python 3.6:
import subprocess
def test_a_repl_session():
comlist = ['./executable_script.py']
script = b'input\nlines\n\n'
res = subprocess.run(comlist, input=script,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
assert res.returncode == 0
assert res.stdout
assert res.stderr == b''
You can mock it:
def test_method(monkeypatch):
monkeypatch.setattr('sys.stdin', io.StringIO('my input'))
# test code