具有多步用户输入的单元测试

时间:2019-08-10 22:27:56

标签: python unit-testing

我正在对部分代码进行单元测试,该部分代码要求一次返回一个参数,然后再将其返回。 我想编写一个测试提示是否正确,但是我不确定如何测试提示的每个阶段。 说提示是: “什么是变量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 ''"

1 个答案:

答案 0 :(得分:1)

首先,您无法像在示例中一样从stdout中读取内容。为了能够从您自己的代码中从stdout读取,您首先必须确保stdout实际上正在写入您可以读取的某些流。这里解释了该机制(对于C,因此您必须将其移植到Python):C language. Read from stdout

第二,进行单元测试时,通常采用不同的方法。您不会检查字符串是否出现在stdout上(这将在更高的测试级别(如集成测试或系统测试)上完成)。相反,在单元测试过程中,您会将代码与与操作系统的实际交互隔离开来。例如,如果您使用input,则可以模拟input函数。参见Mock user input()。然后,与您的方法的不同之处在于,您无需查看stdout,而是检查代码是否以正确的方式真正调用了input。此外,您还可以使模拟返回simulated用户输入。