TypeError:使用 pytest 夹具时缺少 1 个必需的位置参数

Pea*_*ful 21 python fixtures pytest python-3.x

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

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")
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 pytest-3 对此进行测试时,出现以下错误:

类型错误:test_add_two() 缺少 1 个必需的位置参数:'base_value'

这让我感到困惑,因为 base_value 明确作为 的参数之一给出test_add_two。非常感谢任何帮助。

Guy*_*Guy 33

这是因为你正在混合pytest和unittest。尝试

@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"
Run Code Online (Sandbox Code Playgroud)

如果失败,错误将是

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
Run Code Online (Sandbox Code Playgroud)

但是 pytest 和 unittest 不兼容吗?

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

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

  • 标记:skip、skipif、xfail;
  • 汽车用固定装置;

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

  • 固定装置(自动使用固定装置除外,见下文);
  • 参数化;
  • 定制挂钩;

第三方插件可能会或可能不会正常工作,具体取决于插件和测试套件。