我是进行单元测试的新手。我目前正在运行 pytest。我有这个 Program.py 正在运行,但是当我在我的 Program_test.py 上运行 pytest 时,由于我在下面的代码中有断言行的这些类型错误,我一直没有通过测试。我有程序要求用户输入值或输入退出程序。我的 Program_test.py 程序中已经包含了“导入 pytest”。
我是否使用了 lambda 错误?我不确定如何最好地解决这个问题并让这些用户输入起作用。这只是测试用户的 get_weight 函数。
***它已经修复了。我在使用 lambda 时遇到了问题,下面的内容非常有帮助
请您参考如下方法:
这里有一个例子来说明你在哪里出错,为了解释的目的,我将 lambdas 分配给变量:
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"
所以简而言之,您的代码正在将一个参数传递给 lambda,即使您已指定它不需要一个参数。
one_arg_lambda 示例接受一个参数并简单地返回冒号右侧的值。 我建议阅读 lambda 上的文档
或者,如果您不看那里,预期的 lambda 格式是:
lambda parameters: expression
另请注意 monkeypatch.context.setattr 上的文档其中有一个使用 lambda 表达式的好例子。
要查明代码中的错误来自测试中的 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
