我是 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/