簡體   English   中英

使用pytest參數化夾具運行我沒有定義`self`

[英]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的這種繼承將破壞“自我”。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM