我试图为一个简单的Python程序编写测试(使用unittest
)。这是一个交互式程序,特别是它将是一个基于文本的游戏,现在基本上是一个世界的Zuul到Python的端口。
所以现在我想进行良好的测试驱动开发并编写测试,并确保当用户输入命令x时,y结果发生。示例:当用户输入"退出"时,我希望程序结束。我想确保这种行为。唯一的问题是,我似乎无法想出一种方法来提供我自己的程序输入,而无需在shell中输入该输入,因此我无法想到如何为此编写测试。 / p>
目前,我已经将程序嵌入到自己的线程中...我认为这会允许我异步地给它输入,但我仍然不知道如何做到这一点。
有没有办法以编程方式动态提供我自己的程序输入? ...比如,使用stdin
或其他什么?如果是这样,我会感到非常困惑,并希望得到一个例子。
最后,如果我在这里走错了路,请告诉我,因为我是Python和测试驱动开发的新手,我会很感激任何建议。
答案 0 :(得分:1)
如果设置如下代码,您可以设置运行程序主函数的测试并读取用户从文件(或字符串)提供的输入:
def main(inp):
# play game
if __name__ == '__main__':
main(sys.stdin)
然后测试涉及设置输入流(可能是StringIO
),将其提供给main
,并监视输出。如果你认为该程序可能会挂起,你可以在一个单独的线程中运行它并给它一个超时。
如果你想获得幻想,你甚至可以使用pty
来模拟终端输入。