【发布时间】:2019-02-28 00:17:14
【问题描述】:
我正在努力提高使用 VSCode 的效率。
我希望能够在终端中运行一个包含 input() 命令的脚本,并且在它运行时能够立即开始与程序交互。
事实上,我必须运行该程序,然后单击以与它进行交互。
有什么办法可以做到这一点? Jupyter 似乎无法解决问题..
【问题讨论】:
标签: python terminal visual-studio-code interactive
我正在努力提高使用 VSCode 的效率。
我希望能够在终端中运行一个包含 input() 命令的脚本,并且在它运行时能够立即开始与程序交互。
事实上,我必须运行该程序,然后单击以与它进行交互。
有什么办法可以做到这一点? Jupyter 似乎无法解决问题..
【问题讨论】:
标签: python terminal visual-studio-code interactive
我认为您正在寻找测试。 Python 测试
有很多方法可以为您的代码获取自动化的标准输入,但效果更好的一种方法(尽管在初学者之间是一种不常见的做法)是单元测试。它的工作原理是这样的:
顺便说一下,python 本身有一个 unittest 库,可以很容易地运行这种测试。但是您正在寻找的功能(将东西发送到input())需要在patch 函数的帮助下更高级地实现mock 库。
让我们进入代码:
App.py
def printName():
return input("What's your name man?")
Test.py
from unittest.mock import patch
import app
@patch('builtins.input', lambda *args: 'Nolan')
def test_print_name():
# The why we call args there is explained in the link bellow
answer = app.printName() # Will call buitins.input inside it, but it's patched so don't worry about it
assert answer == 'Nolan' # True, so no errors here
if __name__ == "__main__":
test_query_y()
此代码基于this answer
由于不使用类,您会从 unittest 库中丢失很多功能。我的意思是,您可以按原样使用它(尽管这可能不是一个好习惯)。所以我建议你更多地了解 lib :3
【讨论】: