[英]running with pytest parametrize fixture I am getting `self` is not defined
我有這個課:
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:名稱“ self”未定義
我還看到我不能在測試函數中使用self
作為參數。
最后,有沒有一種方法可以避免使用:
expected_min = self.accept.minimum
expected_max = self.accept.maximum
並立即使用self.accept.minimum
?
如果我將self
作為測試函數的參數,它將返回:
找不到夾具“自我”
您在方法中缺少self
(假設它是一個方法,如果它是一個函數,那么您首先需要使其成為TestAcceptC
的方法)參數列表:
def test_init_returns_correct_results(minimum, maximum, expected_min, expected_max):
應該是(我做了一些其他更改;遠離unittest
和更多pytest
類的):
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):
對於pytest固定裝置,unittest.TestCase的這種繼承將破壞“自我”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.