1

我正在尝试unittest为一个简单的 Python 程序编写一个测试(使用)。它是一个交互式程序,特别是基于文本的游戏,目前基本上是 Zuul 世界到 Python 的一个端口。

所以现在我想做一个好的测试驱动开发并编写一个测试并确保当用户输入命令 x 时,y 结果发生。示例:当用户输入“退出”时,我希望程序结束。我想确保这种行为。唯一的问题是,如果不将输入实际输入到 shell 中,我似乎想不出一种方法来给我自己的程序输入,所以我想不出如何为此编写测试。

目前,我已经将该程序嵌入到它自己的线程中......我在想这将允许我异步地给它输入,但我仍然不明白如何做到这一点。

有没有办法以编程方式和动态地给我自己的程序输入?... 喜欢,使用stdin还是什么?如果是这样,我会彻底困惑,并希望举个例子。

最后,如果我在这里走错了路,请告诉我,因为我对 Python 和测试驱动开发都是新手,我将不胜感激任何建议。

4

1 回答 1

1

如果您像这样设置代码,您可以设置运行程序的 main 函数并读取用户将从文件(或字符串)提供的输入的测试:

def main(inp):
    # play game

if __name__ == '__main__':
    main(sys.stdin)

然后测试涉及设置输入流(可能是 a StringIO),将其馈送到main,并监视输出。如果您认为程序可能会挂起,您可以在单独的线程中运行它并给它一个超时。

如果你想变得花哨,你甚至可以使用 apty来模拟终端输入。

于 2013-03-14T09:27:12.240 回答