import sys
def myapp(stdin, stdout):
print >> stdout, "Hi, what's your name?"
name = stdin.readline()
print >> stdout "Hi,", name
# This might be in a separate test module
def test_myapp():
mock_stdin = [create mock object that has .readline() method]
mock_stdout = [create mock object that has .write() method]
myapp(mock_stdin, mock_stdout)
if __name__ == '__main__':
myapp(sys.stdin, sys.stdout)
你最好的选择可能是依赖注入,所以你通常会从系统标准(例如)实际上是传入的对象。所以你可以这样做:
幸运的是,Python使这个过程变得非常简单。下面是模拟stdin的一个更详细的链接:http://konryd.blogspot.com/2010/05/mockity-mock-mock-some-love-for-mock.html
IPython包的文件test_embed.py就是一个很好的例子。在
有两种不同的方法:
子流程
pexpect(如Brian Oakley所述)
^{pr2}$如果您正在测试一个交互式程序,请考虑使用expect。它是专门为与控制台程序交互而设计的(不过,更多的是为了自动化任务而不是测试)。在
如果您不喜欢expect基于(tcl)的语言,您可以尝试pexpect,这也使它更容易与控制台程序交互。在
相关问题 更多 >
编程相关推荐