python - 如何使用输入调用测试函数?

标签 python unit-testing testing input pytest

我有一个用 Python 编写的控制台程序。它使用以下命令向用户提问:

some_input = input('Answer the question:', ...)

如何使用 pytest 测试包含对 input 的调用的函数? 我不想强制测试人员多次输入文本以完成一次测试运行。

最佳答案

正如编译器所建议的那样,pytest 为此提供了一个新的 monkeypatch 固定装置。一个 monkeypatch object 可以更改类中的属性或字典中的值,然后在测试结束时恢复其原始值。

在这种情况下,内置的 input 函数是 python 的 __builtins__ 字典的值,所以我们可以这样修改它:

def test_something_that_involves_user_input(monkeypatch):

    # monkeypatch the "input" function, so that it returns "Mark".
    # This simulates the user entering "Mark" in the terminal:
    monkeypatch.setattr('builtins.input', lambda _: "Mark")

    # go about using input() like you normally would:
    i = input("What is your name?")
    assert i == "Mark"

关于python - 如何使用输入调用测试函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851323/

相关文章:

python - Beautiful Soup - 列表中所有项目的结果转为 CSV

java - 如何将测试类包含到 Maven jar 中并执行它们?

testing - 我是单元测试还是集成测试?

cocoa - 如何测试应用程序之间的拖放功能?

python - 将元素添加到 python 生成器

python - hadoop 流 : how to give list of key values to reducer?

python - Flask-Login 包因导入 Google App Engine 的测试台而被破坏

javascript - Jest Mock React 组件仅在某些测试中

testing - 在像敏捷开发中,谁应该编写测试用例?

python - 如何合并两个DSL查询以进行聚合和过滤