【问题标题】:TypeError: missing 1 required positional argument while using pytest fixture [duplicate]TypeError:使用pytest夹具时缺少1个必需的位置参数[重复]
【发布时间】:2021-07-19 11:34:39
【问题描述】:

我已经在一个文件中编写了我的测试类,我正在尝试使用pytest fixtures,这样我就不必在每个测试函数中创建相同的输入数据。下面是最小的工作示例。

import unittest
import pytest

@pytest.fixture
def base_value():
    return 5

class Test(unittest.TestCase):

    def test_add_two(self, base_value):
        result = base_value + 2
        self.assertEqual(result, 7, "Result doesn't match")

但是,当我使用 pytest-3 进行测试时,我收到以下错误:

TypeError: test_add_two() 缺少 1 个必需的位置参数: 'base_value'

这让我很困惑,因为 base_value 显然是作为 test_add_two 的参数之一给出的。非常感谢任何帮助。

【问题讨论】:

    标签: python python-3.x pytest fixtures


    【解决方案1】:

    这是因为您正在混合使用 pytestunittest。试试

    @pytest.fixture
    def base_value():
        return 5
    
    
    class Test:
        def test_add_two(self, base_value):
            result = base_value + 2
            assert result == 7, "Result doesn't match"
    

    如果失败,错误将是

    def test_add_two(self, base_value):
            result = base_value + 2
    >       assert result == 8, "Result doesn't match"
    E       AssertionError: Result doesn't match
    E       assert 7 == 8
    

    但是pytest不兼容unittest吗?

    仅在有限的基础上。来自Pytest unittest.TestCase Support

    unittest.TestCase 子类中的 pytest 特性 以下 pytest 功能在 unittest.TestCase 子类中工作:

    • 标记:skip、skipif、xfail;
    • 自动使用的灯具;

    以下 pytest 功能不起作用,并且可能永远不会到期 不同的设计理念:

    • 灯具(自用灯具除外,见下文);
    • 参数化;
    • 自定义挂钩;

    第三方插件可能运行良好,也可能运行不佳,具体取决于插件 和测试套件。

    【讨论】:

    • 但是pytest不兼容unittest吗?我只想让两个测试选项都保持打开状态。
    • @Peaceful 仅限于有限的基础上,而不是固定装置(见更新的答案)。
    • 谢谢!但是建议的修改会引发错误:“TypeError: unsupported operand type(s) for +: 'Test' and 'int'”
    • @Peaceful 你有什么改变吗?你的 pytest 版本是什么?这对我来说很好......
    • 我的 pytest 版本是 4.6.9。另外,我认为应该从您的代码中删除 self ,不是吗?
    猜你喜欢
    • 2023-02-06
    • 1970-01-01
    • 2013-07-06
    • 2019-06-25
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多