2

Python で cli-app を作成しました。ncurses が必要な部分もあるので、npyscreen を使っています。pytest を使用してアプリのほとんどの部分を正常にテストしました (モックなどの助けを借りて)。しかし、「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 docsを見つけまし た。しかし、私は完全には理解していません。ほんの一例です。

前もって感謝します。

4

1 に答える 1

1

python docsには記載されていませんが、curses ライブラリのスクリーン ダンプ機能を使用して、分析用の情報を取得できます。

于 2018-09-17T08:02:20.007 に答える