运行 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。
我有这个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。