首页 > 解决方案 > 具有多步用户输入的单元测试

问题描述

我正在对一部分代码进行单元测试,该部分代码在将它们带回来之前一次要求一个参数。我想写一个测试,提示应该是什么,但我不确定如何测试提示的每个阶段。假设提示是:“什么是变量1”--用户输入--“什么是变量2”--用户输入--

然后单元测试将类似于..

with self.subTest(args=args):
                    result = _run(args)
                    self.assertRegex(result.stdout,r'(?m)^'what is variable 1?"

但是,当我尝试一次只向“args”提交一个变量时,测试就会挂起。但是当我尝试一次提交所有变量时,代码失败并说"'what is variable 1' not found in ''"

标签: pythonunit-testing

解决方案


首先,您不能像在示例中那样从标准输出中读取。为了能够从您自己的代码中读取标准输出,您首先必须确保标准输出实际上正在写入您可以从中读取的某个流。这里解释了机制(对于 C,所以你必须将它移植到 Python):C 语言。从标准输出读取

其次,在进行单元测试时,您通常会采用不同的方法。如果出现字符串,您将不会检查标准输出(这将在更高的测试级别上完成,如集成测试或系统测试)。相反,在单元测试期间,您会将代码与与操作系统的实际交互隔离开来。例如,如果您使用input,那么您可以模拟该input函数。请参阅模拟用户输入()。您的方法的不同之处在于,您不查看标准输出,而是检查您的代码是否真的input以正确的方式调用。此外,您还可以使模拟返回simulated用户输入。


推荐阅读