我们已经用 Python 构建了 cli-app。有些部分需要 ncurses,所以我们使用 npyscreen。我们已经使用 pytest 成功地测试了大部分应用程序(借助 mock 和其他东西)。但我们坚持“如何测试 ncurses 代码的一部分”
使用我们的 ncurses 代码中提示用户回答的部分:
"""
Generate text user interface:
example :
fields = [
{"type": "TitleText", "name": "Name", "key": "name"},
{"type": "TitlePassword", "name": "Password", "key": "password"},
{"type": "TitleSelectOne", "name": "Role",
"key": "role", "values": ["admin", "user"]},
]
form = form_generator("Form Foo", fields)
print(form["role"].value[0])
print(form["name"].value)
"""
def form_generator(form_title, fields):
def myFunction(*args):
form = npyscreen.Form(name=form_title)
result = {}
for field in fields:
t = field["type"]
k = field["key"]
del field["type"]
del field["key"]
result[k] = form.add(getattr(npyscreen, t), **field)
form.edit()
return result
return npyscreen.wrapper_basic(myFunction)
我们尝试了很多方法,但都失败了:
- stringIO 捕获输出:失败
- 将输出重定向到文件:失败
- hecate: 失败
- 我认为只有运行整个程序才有效
- pyautogui
- 我认为只有运行整个程序才有效
这是我 尝试过的完整步骤
所以我使用的最后一件事是使用patch
. 我修补了这些功能。但缺点是这些函数中的语句仍未经过测试。因为它只是断言硬编码的返回值。
我找到 用于编写测试的npyscreen 文档。但我不完全明白。只有一个例子。
先感谢您。