你如何测试在python中使用input()和无限循环的REPL /交互式shell

时间:2015-07-24 00:38:30

标签: python shell

我使用以下代码在python中创建了一个自定义REPL,

def repl():
   while True:
      try:
          line = input('$ ')
          do_stuff_with(line)
      except EOFError:
          print('bye bye')
          return

如何测试此功能?我无法弄清楚如何模拟stdin(使用StringIO),发送一些数据,然后发送CTRL-D。或者更好的问题是,创建可测试的REPL的简单方法是什么。注意:我使用的是python 3。

1 个答案:

答案 0 :(得分:1)

你有几种选择。

要以编程方式驾驶互动程序,请使用expectpexpect

要进行测试,请重新定义input()。创建一个不交互的不同函数来通过其测试驱动REPL,并将其插入到定义了repl()的模块中。它会影响内置input(),而你的内容将被调用。

不要测试repl(),而是测试do_stuff_with()