python-3.x - Pytest 用户输入模拟

标签 python-3.x user-input pytest

我是 pytest 的新手,正在尝试解决它。 我目前正在编写一个小型 CLI 游戏,该游戏需要连续多个用户输入,但我不知道如何做到这一点。 我读了很多解决方案,但没能成功。

这是我的代码:

class Player:
def __init__(self):
    self.set_player_name()
    self.set_player_funds()

def set_player_name(self):
    self.name = str(input("Player, what's you name?\n"))

def set_player_funds(self):
    self.funds = int(input("How much money do you want?\n"))

我只是想自动执行这两个请求的用户输入。 (即:输入“Bob”测试:assertplayer.name==“Bob”

的测试

有人可以帮忙吗? 谢谢!

最佳答案

测试输入的相当优雅的方法是使用 monkeypatch fixture 来模拟输入文本。要处理多个输入,可以使用 lambda 语句和迭代器对象。

def test_set_player_name(monkeypatch):
    # provided inputs
    name = 'Tranberd'
    funds = 100
    
    # creating iterator object
    answers = iter([name, str(funds)])

    # using lambda statement for mocking
    monkeypatch.setattr('builtins.input', lambda name: next(answers))

    player = Player()
    assert player.name == name
    assert player.funds == funds
    
docs.pytest.org 上的

monkeypatch .
wiki.python.org 上的迭代器对象 .

关于python-3.x - Pytest 用户输入模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53472142/

相关文章:

python - 如何在Python中读取多个nltk语料库文件并写入单个文本文件

react-native - react 原生文本输入,按下时更改光标位置

html - 样式化开放式文本输入

python - 如何将 parser.addoption 放在测试模块中,而不是放在 conftest.py 中?

python - pytest - 修补类不起作用,而是调用类

python - 处理 OCR 导入

python - 对于 PIL.ImageFilter.GaussianBlur 如何使用内核以及半径参数与标准偏差有关吗?

python - 在 python 3.0 中处理文件属性

c++ - 如何生成包含两个值的随机数?

SQLAlchemy: "catching classes that do not inherit from BaseException is not allowed"在 Pytest 中测试时