运行 pytest parametrize fixture 我得到 `self` is not defined

running with pytest parametrize fixture I am getting `self` is not defined

我有这个class:

accept.py

class AcceptC(object):

    def __init__(self):
        self.minimum = 30
        self.maximum = 40

和单元测试:

accept_test.py

import unittest
import pytest

from app.accept import AcceptC


class TestAcceptC(unittest.TestCase):

    def setUp(self):
        self.accept = AcceptC()


@pytest.mark.parametrize(
    "minimum, maximum, expected_min, expected_max", [
        ("13", "5", 30, 40),
        ("30", "40", 30, 40),
    ])
def test_init_returns_correct_results(minimum, maximum, expected_min, expected_max):
    expected_min = self.accept.minimum
    expected_max = self.accept.maximum
    self.assertEqual(minimum, expected_min)
    self.assertEqual(maximum, expected_max)


if __name__ == "__main__":
    unittest.main()

当运行 pytest时,我得到一个错误:

NameError: name 'self' is not defined

我还看到我不能在测试函数中使用 self 作为参数。

最后,有没有办法避免使用:

expected_min = self.accept.minimum
expected_max = self.accept.maximum

并立即使用 self.accept.minimum?

如果我使用 self 作为测试函数的参数,它 returns:

fixture 'self' not found

您的方法中缺少 self(假设它是一个方法,如果它是一个函数,那么您需要先将其设为 TestAcceptC 的方法)参数列表:

def test_init_returns_correct_results(minimum, maximum, expected_min, expected_max):

应该是(我做了一些额外的改变;远离 unittest 和更多 pytest-like):

class TestAcceptC():  # no need to subclass unittest

    @classmethod
    def setup_class(cls):
        # Called when setting up the class
        cls.accept = AcceptC()

    @pytest.mark.parametrize(
        ["minimum", "maximum", "expected_min", "expected_max"], [
            ("13", "5", 30, 40),
            ("30", "40", 30, 40),
        ])
    def test_init_returns_correct_results(self, minimum, maximum, expected_min, expected_max):
        # difference is here -------------^^^^
        # pytest can use normal asserts here.
        assert self.accept.minimum == expected_min
        assert self.accept.maximum == expected_max

问题仅仅是因为:

class TestAcceptC(unittest.TestCase):

unittest.TestCase 的这种继承将破坏 'self' 关于 pytest fixtures。

信息:https://docs.pytest.org/en/3.0.1/unittest.html