的Python:类型错误: ()取0的位置参数,但1被赋予由于断言

问题描述 投票:0回答:1

我是新来制作的单元测试。我目前正在运行pytest。我有这个Program.py运行,但是当我在我的Program_test.py我一直在失败的试验,由于从我在那里我有下面的代码我断言行这些TypeErrors运行pytest。我有程序要求用户提供的输入值或进入退出程序。我有“进口pytest”已经包含在我的Program_test.py程序。

我使用的λ错了吗?我不知道如何以最佳方式处理这一和得到这些用户的输入工作。这是刚刚从用户测试get_weight功能。

***已经是固定的。我曾与拉姆达问题,下面是非常有益的

python python-3.x unit-testing pytest
1个回答
6
投票

这里有一个例子,说明你要去哪里错和解释的目的,我分配lambda表达式变量:

zero_arg_lambda = lambda: "131"  # Takes no args
one_arg_lambda = lambda x: "131"  # Takes one arg

呼叫zero_arg_lambda与ARG(同您的错误):

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的文档

或者,如果你不看有预期的λ格式为:

拉姆达参数:表达

另外请注意,其具有使用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 
© www.soinside.com 2019 - 2024. All rights reserved.