ユニットテストを行うのは初めてです。私は現在pytestを実行しています。私はこのProgram.pyを実行していますが、Program_test.pyでpytestを実行すると、以下のコードにアサート行がある場所からのこれらのTypeErrorsが原因でテストに失敗しました。プログラムにユーザーに入力値を要求するか、プログラムを終了するためにEnterキーを押します。 Program_test.pyプログラムに 'import pytest'が既に含まれています。
ラムダを間違って使用していますか?これに最善のアプローチをして、それらのユーザー入力を機能させる方法はわかりません。これは、ユーザーからget_weight関数をテストするだけです。
***すでに修正されています。ラムダに問題があり、その下がとても役に立ちました
以下は、どこが間違っているかを示す例です。説明のために、ラムダを変数に割り当てています。
zero_arg_lambda = lambda: "131" # Takes no args
one_arg_lambda = lambda x: "131" # Takes one arg
Argを指定してzero_arg_lambdaを呼び出します(エラーと同じ)。
zero_arg_lambda(1)
>>> Traceback (most recent call last):
>>> File "<input>", line 1, in <module>
>>> TypeError: <lambda>() takes no arguments (1 given)
One_arg_lambdaを呼び出します。
one_arg_lambda(1)
>>> "131"
つまり、コードがパラメーターを取らないように指定したとしても、コードはパラメーターをラムダに渡します。
One_arg_lambdaの例は、パラメーターを取り、単にコロンの右側に値を返します。 lambda のドキュメントを読むことをお勧めします
または、そこを見ない場合、予期されるラムダ形式は次のとおりです。
ラムダパラメータ:式
monkeypatch.context.setattr のドキュメントにも注意してください。ラムダ式を使用する良い例があります。
それを特定するために、コード内のエラーは、テスト内のcontext.setattr呼び出しから発生しています。
def test_get_weight_returns_valid_input(monkeypatch):
with monkeypatch.context() as context:
# Old line causing error: context.setattr('builtins.input', lambda: "131")
context.setattr('builtins.input', lambda x: "131") # Fixed